From 8cbfa92efb7a09d3c2b53e387b4938b6be95f0be Mon Sep 17 00:00:00 2001 From: Scott_Kjr3347 <34526954+ScottKjr3347@users.noreply.github.com> Date: Thu, 28 May 2026 08:41:02 -0700 Subject: [PATCH 1/2] iOS26 Photos sqlite Support and Parser Description Updates -Updated most parsers to support iOS26 -Updated Parser Names and Description to help with what parser can pull -Removed old parsers from artifacts folder -Added more parsers to exclude list to speed up processing --- ...sicAssetData.py => Ph001BasicAssetData.py} | 59 +- ...Data.py => Ph002BasicAssetandAlbumData.py} | 1643 +- ...l.py => Ph003TrashedRemovedfromCamRoll.py} | 63 +- .../{Ph4Hidden.py => Ph004Hidden.py} | 42 +- ...h5HasLocations.py => Ph005HasLocations.py} | 63 +- ...ewedPlayData.py => Ph006ViewedPlayData.py} | 490 +- .../{Ph7Favorite.py => Ph007Favorite.py} | 42 +- ...HasAdjustment.py => Ph008HasAdjustment.py} | 42 +- ...rstAvalanche.py => Ph009BurstAvalanche.py} | 44 +- ...1KwrdsCapsTitlesDescripsBasicAssetData.py} | 634 +- ...cesNAD.py => Ph015PeopleandDetFacesNAD.py} | 43 +- ...aces.py => Ph016AssetPeopleandDetFaces.py} | 38 +- ...GenAIDetected.py => Ph017GenAIDetected.py} | 63 +- .../{Ph20AlbumsNAD.py => Ph020AlbumsNAD.py} | 63 +- ...haredNAD.py => Ph021AlbumsNonSharedNAD.py} | 281 +- ...ums.py => Ph022AssetsInNonSharedAlbums.py} | 386 +- ...msSharedNAD.py => Ph023AlbumsSharedNAD.py} | 22 +- ...Albums.py => Ph024AssetsInSharedAlbums.py} | 22 +- ...vAlbumsNAD.py => Ph025SWYConvAlbumsNAD.py} | 300 +- ...LAssets.py => Ph026SyndicationPLAssets.py} | 488 +- ...dsNAD.py => Ph030iCloudShareMethodsNAD.py} | 232 +- ....py => Ph031iCloudSharePhotoLibraryNAD.py} | 20 +- ...rib.py => Ph032AssetsIniCldSPLwContrib.py} | 23 +- ...> Ph033AssetsIniCldSPLfromOtherContrib.py} | 21 +- ...nksNAD.py => Ph034iCloudSharedLinksNAD.py} | 19 +- ...sets.py => Ph035iCloudSharedLinkAssets.py} | 19 +- ...ResouData.py => Ph050AssetIntResouData.py} | 6471 ++++++-- ...> Ph051PossOptimizedAssetsIntResouData.py} | 1267 +- ...y => Ph080comappleMobileSlideShowPlist.py} | 12 +- ...raPlist.py => Ph081comappleCameraPlist.py} | 12 +- ...py => Ph082comappleMediaAnalysisDPlist.py} | 12 +- ...st.py => Ph083comapplePurpleBuddyPlist.py} | 11 +- ...> Ph084CameraSmartSharingMetadataPlist.py} | 14 +- ... Ph085acntsdcloudServiceEnableLogplist.py} | 10 +- ...> Ph086astsdcloudServiceEnableLogplist.py} | 11 +- ...plist.py => Ph087UFEDdevcievaluesplist.py} | 39 +- ...is.py => Ph094Ios14REFforAssetAnalysis.py} | 22 +- ...is.py => Ph095iOS15REFforAssetAnalysis.py} | 22 +- ...is.py => Ph096iOS16REFforAssetAnalysis.py} | 22 +- ...is.py => Ph097iOS17REFforAssetAnalysis.py} | 22 +- ...is.py => Ph098iOS18REFforAssetAnalysis.py} | 33 +- .../artifacts/Ph10AssetParsedEmbeddedFiles.py | 4460 ------ .../Ph126iOS26REFforAssetAnalysis.py | 12950 ++++++++++++++++ .../Ph70UserAdjustDateTimezoneLocation.py | 6082 -------- scripts/modules_to_exclude.py | 49 +- 45 files changed, 23715 insertions(+), 12968 deletions(-) rename scripts/artifacts/{Ph1BasicAssetData.py => Ph001BasicAssetData.py} (97%) rename scripts/artifacts/{Ph2BasicAssetandAlbumData.py => Ph002BasicAssetandAlbumData.py} (88%) rename scripts/artifacts/{Ph3TrashedRemovedfromCamRoll.py => Ph003TrashedRemovedfromCamRoll.py} (94%) rename scripts/artifacts/{Ph4Hidden.py => Ph004Hidden.py} (90%) rename scripts/artifacts/{Ph5HasLocations.py => Ph005HasLocations.py} (97%) rename scripts/artifacts/{Ph6ViewedPlayData.py => Ph006ViewedPlayData.py} (52%) rename scripts/artifacts/{Ph7Favorite.py => Ph007Favorite.py} (90%) rename scripts/artifacts/{Ph8HasAdjustment.py => Ph008HasAdjustment.py} (94%) rename scripts/artifacts/{Ph9BurstAvalanche.py => Ph009BurstAvalanche.py} (91%) rename scripts/artifacts/{Ph11KwrdsCapsTitlesDescripsBasicAssetData.py => Ph011KwrdsCapsTitlesDescripsBasicAssetData.py} (73%) rename scripts/artifacts/{Ph15PeopleandDetFacesNAD.py => Ph015PeopleandDetFacesNAD.py} (99%) rename scripts/artifacts/{Ph16AssetPeopleandDetFaces.py => Ph016AssetPeopleandDetFaces.py} (99%) rename scripts/artifacts/{Ph17GenAIDetected.py => Ph017GenAIDetected.py} (91%) rename scripts/artifacts/{Ph20AlbumsNAD.py => Ph020AlbumsNAD.py} (93%) rename scripts/artifacts/{Ph21AlbumsNonSharedNAD.py => Ph021AlbumsNonSharedNAD.py} (87%) rename scripts/artifacts/{Ph22AssetsInNonSharedAlbums.py => Ph022AssetsInNonSharedAlbums.py} (86%) rename scripts/artifacts/{Ph23AlbumsSharedNAD.py => Ph023AlbumsSharedNAD.py} (99%) rename scripts/artifacts/{Ph24AssetsInSharedAlbums.py => Ph024AssetsInSharedAlbums.py} (99%) rename scripts/artifacts/{Ph25SWYConvAlbumsNAD.py => Ph025SWYConvAlbumsNAD.py} (78%) rename scripts/artifacts/{Ph26SyndicationPLAssets.py => Ph026SyndicationPLAssets.py} (79%) rename scripts/artifacts/{Ph30iCloudShareMethodsNAD.py => Ph030iCloudShareMethodsNAD.py} (78%) rename scripts/artifacts/{Ph31iCloudSharePhotoLibraryNAD.py => Ph031iCloudSharePhotoLibraryNAD.py} (98%) rename scripts/artifacts/{Ph32AssetsIniCldSPLwContrib.py => Ph032AssetsIniCldSPLwContrib.py} (98%) rename scripts/artifacts/{Ph33AssetsIniCldSPLfromOtherContrib.py => Ph033AssetsIniCldSPLfromOtherContrib.py} (97%) rename scripts/artifacts/{Ph34iCloudSharedLinksNAD.py => Ph034iCloudSharedLinksNAD.py} (98%) rename scripts/artifacts/{Ph35iCloudSharedLinkAssets.py => Ph035iCloudSharedLinkAssets.py} (99%) rename scripts/artifacts/{Ph50AssetIntResouData.py => Ph050AssetIntResouData.py} (74%) rename scripts/artifacts/{Ph51PossOptimizedAssetsIntResouData.py => Ph051PossOptimizedAssetsIntResouData.py} (80%) rename scripts/artifacts/{Ph80comappleMobileSlideShowPlist.py => Ph080comappleMobileSlideShowPlist.py} (86%) rename scripts/artifacts/{Ph81comappleCameraPlist.py => Ph081comappleCameraPlist.py} (92%) rename scripts/artifacts/{Ph82comappleMediaAnalysisDPlist.py => Ph082comappleMediaAnalysisDPlist.py} (75%) rename scripts/artifacts/{Ph83comapplePurpleBuddyPlist.py => Ph083comapplePurpleBuddyPlist.py} (74%) rename scripts/artifacts/{Ph84CameraSmartSharingMetadataPlist.py => Ph084CameraSmartSharingMetadataPlist.py} (83%) rename scripts/artifacts/{Ph85acntsdcloudServiceEnableLogplist.py => Ph085acntsdcloudServiceEnableLogplist.py} (80%) rename scripts/artifacts/{Ph86astsdcloudServiceEnableLogplist.py => Ph086astsdcloudServiceEnableLogplist.py} (79%) rename scripts/artifacts/{Ph100UFEDdevcievaluesplist.py => Ph087UFEDdevcievaluesplist.py} (69%) rename scripts/artifacts/{Ph94Ios14REFforAssetAnalysis.py => Ph094Ios14REFforAssetAnalysis.py} (99%) rename scripts/artifacts/{Ph95iOS15REFforAssetAnalysis.py => Ph095iOS15REFforAssetAnalysis.py} (99%) rename scripts/artifacts/{Ph96iOS16REFforAssetAnalysis.py => Ph096iOS16REFforAssetAnalysis.py} (99%) rename scripts/artifacts/{Ph97iOS17REFforAssetAnalysis.py => Ph097iOS17REFforAssetAnalysis.py} (99%) rename scripts/artifacts/{Ph98iOS18REFforAssetAnalysis.py => Ph098iOS18REFforAssetAnalysis.py} (99%) delete mode 100644 scripts/artifacts/Ph10AssetParsedEmbeddedFiles.py create mode 100644 scripts/artifacts/Ph126iOS26REFforAssetAnalysis.py delete mode 100644 scripts/artifacts/Ph70UserAdjustDateTimezoneLocation.py diff --git a/scripts/artifacts/Ph1BasicAssetData.py b/scripts/artifacts/Ph001BasicAssetData.py similarity index 97% rename from scripts/artifacts/Ph1BasicAssetData.py rename to scripts/artifacts/Ph001BasicAssetData.py index 044b43230..d8d0828d5 100644 --- a/scripts/artifacts/Ph1BasicAssetData.py +++ b/scripts/artifacts/Ph001BasicAssetData.py @@ -1,45 +1,48 @@ __artifacts_v2__ = { - 'Ph1_1AssetBasicDataPhDaPsql': { - 'name': 'Ph1.1-Asset Basic Data-PhDaPsql', + 'Ph001_1AssetBasicDataPhDaPsql': { + 'name': 'Ph001.1-Asset Basic Data-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite.' - ' The results will contain one row per ZASSET table Z_PK value and supports iOS 11-18.', + ' The results will contain one row per ZASSET table Z_PK value and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-04', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-A-Asset_Basic_Data', + 'category': 'Photos.sqlite-Assets-BasicData-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "image" }, - 'Ph1_2AssetBasicDataSyndPL': { - 'name': 'Ph1.2-Asset Basic Data-SyndPL', + 'Ph001_2AssetBasicDataSyndPL': { + 'name': 'Ph001.2-Asset Basic Data-SyndPL', 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite.' - ' The results will contain one row per ZASSET table Z_PK value and supports iOS 11-18.', + ' The results will contain one row per ZASSET table Z_PK value and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-04', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-BasicData-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "image" }, - 'Ph1_3AssetBasicDataGenPlayPsql': { - 'name': 'Ph1.3-Asset Basic Data-GenPlayPsql', + 'Ph001_3AssetBasicDataGenPlayPsql': { + 'name': 'Ph001.3-Asset Basic Data-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-database-Photos.sqlite.' - ' The results will contain one row per ZASSET table Z_PK value and supports iOS 18.', + ' The results will contain one row per ZASSET table Z_PK value and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-BasicData-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], - "artifact_icon": "play" + "artifact_icon": "image" } } @@ -48,7 +51,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph1_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph001_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -58,7 +61,7 @@ def Ph1_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, t if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -462,7 +465,7 @@ def Ph1_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, t return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -592,7 +595,7 @@ def Ph1_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, t return data_headers, data_list, source_path @artifact_processor -def Ph1_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph001_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -602,7 +605,7 @@ def Ph1_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, tim if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -1007,7 +1010,7 @@ def Ph1_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, tim return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1136,7 +1139,7 @@ def Ph1_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, tim return data_headers, data_list, source_path @artifact_processor -def Ph1_3AssetBasicDataGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph001_3AssetBasicDataGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -1146,10 +1149,10 @@ def Ph1_3AssetBasicDataGenPlayPsql(files_found, report_folder, seeker, wrap_text if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph2BasicAssetandAlbumData.py b/scripts/artifacts/Ph002BasicAssetandAlbumData.py similarity index 88% rename from scripts/artifacts/Ph2BasicAssetandAlbumData.py rename to scripts/artifacts/Ph002BasicAssetandAlbumData.py index 1be480371..6b4dd2aeb 100644 --- a/scripts/artifacts/Ph2BasicAssetandAlbumData.py +++ b/scripts/artifacts/Ph002BasicAssetandAlbumData.py @@ -1,54 +1,57 @@ __artifacts_v2__ = { - 'Ph2_1AssetBasicGenAlbumDataPhDaPsql': { - 'name': 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', + 'Ph002_1AssetBasicGenAlbumDataPhDaPsql': { + 'name': 'Ph002.1-Asset Basic Data & GenAlbum Data-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for basic asset and album data.' - ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 11-18.' + ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS.' ' Use 2-Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' - ' Shared with You Conversation Identifiers Assets.', + ' Shared with You Conversation Identifiers Assets.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-A-Asset_Basic_Data', + 'category': 'Photos.sqlite-Assets-BasicData-wAlbums-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "image" }, - 'Ph2_2AssetBasicConversationDataSyndPL': { - 'name': 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', + 'Ph002_2AssetBasicConversationDataSyndPL': { + 'name': 'Ph002.2-Asset Basic Data & Convers Data-SyndPL', 'description': 'Parses basic asset row data from -Syndication.photoslibrary-database-Photos.sqlite' ' for basic asset and album data. The results may contain multiple records' - ' per ZASSET table Z_PK value and supports iOS 11-18.' + ' per ZASSET table Z_PK value and supports iOS.' ' Use -Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' - ' Shared with You Conversation Identifiers Assets.', + ' Shared with You Conversation Identifiers Assets.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-BasicData-wAlbums-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "image" }, - 'Ph2_3AssetBasicGenAlbumGenPlayPsql': { - 'name': 'Ph2.3-Asset Basic Data & GenAlbum Data-GenPlayPsql', + 'Ph002_3AssetBasicGenAlbumGenPlayPsql': { + 'name': 'Ph002.3-Asset Basic Data & GenAlbum Data-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for basic asset and album data.' - ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 18.' + ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS.' ' Use 2-Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' - ' Shared with You Conversation Identifiers Assets.', + ' Shared with You Conversation Identifiers Assets.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains GenPlay-Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-BasicData-wAlbums-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -61,7 +64,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph2_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph002_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -71,7 +74,7 @@ def Ph2_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): @@ -2491,7 +2494,7 @@ def Ph2_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -2853,21 +2856,593 @@ def Ph2_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON + AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON + CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Is_Recently_Saved-21', + 'zAsset-Saved Asset Type-22', + 'zAddAssetAttr-Imported by Bundle ID-23', + 'zAddAssetAttr-Imported By Display Name-24', + 'zAddAssetAttr-Imported by-25', + 'zCldMast-Imported by Bundle ID-26', + 'zCldMast-Imported by Display Name-27', + 'zCldMast-Imported By-28', + 'zAsset-Visibility State-29', + 'zExtAttr-Camera Make-30', + 'zExtAttr-Camera Model-31', + 'zExtAttr-Lens Model-32', + 'zAsset-Derived Camera Capture Device-33', + 'zAddAssetAttr-Camera Captured Device-34', + 'zAsset-Capture_Session_Identifier-35', + 'zAddAssetAttr-Share Type-36', + 'zCldMast-Cloud Local State-37', + ('zCldMast-Import Date-38', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'), + 'zAddAssetAttr-Import Session ID-40', + ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-42', + ('zAsset-Cloud Batch Publish Date-43', 'datetime'), + ('zAsset-Cloud Server Publish Date-44', 'datetime'), + 'zAsset-Cloud Download Requests-45', + 'zAsset-Cloud Batch ID-46', + 'zAsset-Latitude-47', + 'zExtAttr-Latitude-48', + 'zAsset-Longitude-49', + 'zExtAttr-Longitude-50', + 'zAddAssetAttr-GPS Horizontal Accuracy-51', + 'zAddAssetAttr-Location Hash-52', + 'zAddAssetAttr-Shifted Location Valid-53', + 'zAddAssetAttr-Shifted Location Data-54', + 'zAddAssetAttr-Reverse Location Is Valid-55', + 'zAddAssetAttr-Reverse Location Data-56', + 'AAAzCldMastMedData-zOPT-57', + 'zAddAssetAttr-Media Metadata Type-58', + 'AAAzCldMastMedData-Data-59', + 'CldMasterzCldMastMedData-zOPT-60', + 'zCldMast-Media Metadata Type-61', + 'CMzCldMastMedData-Data-62', + 'zAsset-Bundle Scope-63', + ('zGenAlbum-Creation Date-64', 'datetime'), + ('zGenAlbum-Start Date-65', 'datetime'), + ('zGenAlbum-End Date-66', 'datetime'), + 'zGenAlbum-Album Kind-67', + 'zGenAlbum-Title-User&System Applied-68', + 'zGenAlbum- Import Session ID-69', + 'zGenAlbum-Imported by Bundle Identifier-70', + 'zGenAlbum-Cached Photos Count-71', + 'zGenAlbum-Cached Videos Count-72', + 'zGenAlbum-Cached Count-73', + 'zGenAlbum-Trashed State-74', + ('zGenAlbum-Trash Date-75', 'datetime'), + 'zGenAlbum-UUID-76', + 'zGenAlbum-Cloud GUID-77', + 'zAsset-Active Library Scope Participation State-78', + 'zAsset-zPK-79', + 'zAddAssetAttr-zPK-80', + 'zAsset-UUID = store.cloudphotodb-81', + 'zAddAssetAttr-Original Stable Hash-82', + 'zAddAssetAttr.Adjusted Stable Hash-83') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + @artifact_processor -def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph002_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) - if source_path.endswith('.sqlite'): - break + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZGENERICASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON + zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + ('zAsset-Modification Date-5', 'datetime'), + ('zAsset-Last Shared Date-6', 'datetime'), + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', + ('zAsset-Trashed Date-12', 'datetime'), + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr- Creator Bundle ID-14', + 'zAddAssetAttr-Imported by-15', + 'zAsset-Visibility State-16', + 'zAddAssetAttr-Camera Captured Device-17', + 'zCldMast-Cloud Local State-18', + ('zCldMast-Import Date-19', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-20', + ('zAsset-Cloud Batch Publish Date-21', 'datetime'), + ('zAsset-Cloud Server Publish Date-22', 'datetime'), + 'zAsset-Cloud Download Requests-23', + 'zAsset-Cloud Batch ID-24', + 'zAsset-Latitude-25', + 'zAsset-Longitude-26', + 'zAddAssetAttr-Location Hash-27', + 'zAddAssetAttr-Shifted Location Valid-28', + 'zAddAssetAttr-Shifted Location Data-29', + 'zAddAssetAttr-Reverse Location Is Valid-30', + 'zAddAssetAttr-Reverse Location Data-31', + ('zGenAlbum-Start Date-32', 'datetime'), + ('zGenAlbum-End Date-33', 'datetime'), + 'zGenAlbum-Album Kind-34', + 'zGenAlbum-Title-User&System Applied-35', + 'zGenAlbum- Import Session ID-36', + 'zGenAlbum-Cached Photos Count-37', + 'zGenAlbum-Cached Videos Count-38', + 'zGenAlbum-Cached Count-39', + 'zGenAlbum-Trashed State-40', + ('zGenAlbum-Trash Date-41', 'datetime'), + 'zGenAlbum-UUID-42', + 'zGenAlbum-Cloud GUID-43', + 'zAsset-zPK-44', + 'zAddAssetAttr-zPK-45', + 'zAsset-UUID = store.cloudphotodb-46', + 'zAddAssetAttr-Master Fingerprint-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) - return (), [], source_path - if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): + elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -2875,7 +3450,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr data_list = [] query = ''' - SELECT + SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', @@ -3011,8 +3586,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS + LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS ORDER BY zAsset.ZDATECREATED ''' @@ -3077,7 +3652,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): + elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -3085,24 +3660,26 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr data_list = [] query = ''' - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -3115,8 +3692,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID', + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID', CASE zAddAssetAttr.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -3133,16 +3710,40 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 12 THEN '12-SWY_Syndication_PL-12' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', CASE zAsset.ZVISIBILITYSTATE WHEN 0 THEN '0-Visible-PL-CameraRoll-0' WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' - END AS 'zAddAssetAttr-Camera Captured Device', + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', CASE zCldMast.ZCLOUDLOCALSTATE WHEN 0 THEN '0-Not Synced with Cloud-0' WHEN 1 THEN '1-Pending Upload-1' @@ -3151,6 +3752,11 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' END AS 'zCldMast-Cloud Local State', DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Alt Import Image Date', zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', @@ -3160,10 +3766,12 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN -180.0 THEN '-180.0' ELSE zAsset.ZLATITUDE END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', CASE zAsset.ZLONGITUDE WHEN -180.0 THEN '-180.0' ELSE zAsset.ZLONGITUDE END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' @@ -3183,6 +3791,32 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', CASE zGenAlbum.ZKIND @@ -3212,7 +3846,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr END AS 'zGenAlbum-Trashed State', DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', zGenAlbum.ZUUID AS 'zGenAlbum-UUID', - zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', @@ -3220,9 +3854,14 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr FROM ZGENERICASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON + AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON + CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_34ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS ORDER BY zAsset.ZDATECREATED ''' @@ -3233,61 +3872,81 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47])) + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65])) data_headers = (('zAsset-Date Created-0', 'datetime'), ('zAsset- SortToken -CameraRoll-1', 'datetime'), ('zAsset-Added Date-2', 'datetime'), ('zCldMast-Creation Date-3', 'datetime'), 'zAddAssetAttr-Time Zone Name-4', - ('zAsset-Modification Date-5', 'datetime'), - ('zAsset-Last Shared Date-6', 'datetime'), - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', - ('zAsset-Trashed Date-12', 'datetime'), - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr- Creator Bundle ID-14', - 'zAddAssetAttr-Imported by-15', - 'zAsset-Visibility State-16', - 'zAddAssetAttr-Camera Captured Device-17', - 'zCldMast-Cloud Local State-18', - ('zCldMast-Import Date-19', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-20', - ('zAsset-Cloud Batch Publish Date-21', 'datetime'), - ('zAsset-Cloud Server Publish Date-22', 'datetime'), - 'zAsset-Cloud Download Requests-23', - 'zAsset-Cloud Batch ID-24', - 'zAsset-Latitude-25', - 'zAsset-Longitude-26', - 'zAddAssetAttr-Location Hash-27', - 'zAddAssetAttr-Shifted Location Valid-28', - 'zAddAssetAttr-Shifted Location Data-29', - 'zAddAssetAttr-Reverse Location Is Valid-30', - 'zAddAssetAttr-Reverse Location Data-31', - ('zGenAlbum-Start Date-32', 'datetime'), - ('zGenAlbum-End Date-33', 'datetime'), - 'zGenAlbum-Album Kind-34', - 'zGenAlbum-Title-User&System Applied-35', - 'zGenAlbum- Import Session ID-36', - 'zGenAlbum-Cached Photos Count-37', - 'zGenAlbum-Cached Videos Count-38', - 'zGenAlbum-Cached Count-39', - 'zGenAlbum-Trashed State-40', - ('zGenAlbum-Trash Date-41', 'datetime'), - 'zGenAlbum-UUID-42', - 'zGenAlbum-Cloud GUID-43', - 'zAsset-zPK-44', - 'zAddAssetAttr-zPK-45', - 'zAsset-UUID = store.cloudphotodb-46', - 'zAddAssetAttr-Master Fingerprint-47') + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr- Creator Bundle ID-16', + 'zAddAssetAttr-Imported by-17', + 'zCldMast-Imported By-18', + 'zAsset-Visibility State-19', + 'zExtAttr-Camera Make-20', + 'zExtAttr-Camera Model-21', + 'zExtAttr-Lens Model-22', + 'zAddAssetAttr-Camera Captured Device-23', + 'zAddAssetAttr-Share Type-24', + 'zCldMast-Cloud Local State-25', + ('zCldMast-Import Date-26', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', 'datetime'), + 'zAddAssetAttr-Import Session ID-28', + 'zAddAssetAttr-Alt Import Image Date-29', + 'zCldMast-Import Session ID- AirDrop-StillTesting-30', + ('zAsset-Cloud Batch Publish Date-31', 'datetime'), + ('zAsset-Cloud Server Publish Date-32', 'datetime'), + 'zAsset-Cloud Download Requests-33', + 'zAsset-Cloud Batch ID-34', + 'zAsset-Latitude-35', + 'zExtAttr-Latitude-36', + 'zAsset-Longitude-37', + 'zExtAttr-Longitude-38', + 'zAddAssetAttr-Location Hash-39', + 'zAddAssetAttr-Shifted Location Valid-40', + 'zAddAssetAttr-Shifted Location Data-41', + 'zAddAssetAttr-Reverse Location Is Valid-42', + 'zAddAssetAttr-Reverse Location Data-43', + 'AAAzCldMastMedData-zOPT-44', + 'zAddAssetAttr-Media Metadata Type-45', + 'AAAzCldMastMedData-Data-46', + 'CldMasterzCldMastMedData-zOPT-47', + 'zCldMast-Media Metadata Type-48', + 'CMzCldMastMedData-Data-49', + ('zGenAlbum-Start Date-50', 'datetime'), + ('zGenAlbum-End Date-51', 'datetime'), + 'zGenAlbum-Album Kind-52', + 'zGenAlbum-Title-User&System Applied-53', + 'zGenAlbum- Import Session ID-54', + 'zGenAlbum-Cached Photos Count-55', + 'zGenAlbum-Cached Videos Count-56', + 'zGenAlbum-Cached Count-57', + 'zGenAlbum-Trashed State-58', + ('zGenAlbum-Trash Date-59', 'datetime'), + 'zGenAlbum-UUID-60', + 'zGenAlbum-Cloud GUID-61', + 'zAsset-zPK-62', + 'zAddAssetAttr-zPK-63', + 'zAsset-UUID = store.cloudphotodb-64', + 'zAddAssetAttr-Master Fingerprint-65') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): + elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -3328,7 +3987,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' END AS 'zAsset-Saved Asset Type', - zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID', + zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr-Creator Bundle ID', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', CASE zAddAssetAttr.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -3345,6 +4005,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 12 THEN '12-SWY_Syndication_PL-12' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' END AS 'zAddAssetAttr-Imported by', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', CASE zCldMast.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -3369,6 +4031,11 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' @@ -3407,6 +4074,10 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ELSE zAsset.ZLONGITUDE END AS 'zAsset-Longitude', zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' @@ -3452,6 +4123,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' ELSE 'CMzCldMastMedData-Data_Empty-NULL' END AS 'CMzCldMastMedData-Data', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', CASE zGenAlbum.ZKIND @@ -3470,7 +4142,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' END AS 'zGenAlbum-Album Kind', zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', - zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZCREATORBUNDLEID AS 'zGenAlbum-Creator Bundle Identifier', zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', @@ -3485,8 +4158,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZGENERICASSET zAsset + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -3495,11 +4168,10 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_34ASSETS = zAsset.Z_PK + LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_3ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS ORDER BY zAsset.ZDATECREATED ''' - db_records = get_sqlite_db_records(source_path, query) for row in db_records: data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], @@ -3509,7 +4181,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65])) + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72])) data_headers = (('zAsset-Date Created-0', 'datetime'), ('zAsset- SortToken -CameraRoll-1', 'datetime'), @@ -3527,61 +4199,68 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ('zAsset-Trashed Date-13', 'datetime'), 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr- Creator Bundle ID-16', - 'zAddAssetAttr-Imported by-17', - 'zCldMast-Imported By-18', - 'zAsset-Visibility State-19', - 'zExtAttr-Camera Make-20', - 'zExtAttr-Camera Model-21', - 'zExtAttr-Lens Model-22', - 'zAddAssetAttr-Camera Captured Device-23', - 'zAddAssetAttr-Share Type-24', - 'zCldMast-Cloud Local State-25', - ('zCldMast-Import Date-26', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', 'datetime'), - 'zAddAssetAttr-Import Session ID-28', - 'zAddAssetAttr-Alt Import Image Date-29', - 'zCldMast-Import Session ID- AirDrop-StillTesting-30', - ('zAsset-Cloud Batch Publish Date-31', 'datetime'), - ('zAsset-Cloud Server Publish Date-32', 'datetime'), - 'zAsset-Cloud Download Requests-33', - 'zAsset-Cloud Batch ID-34', - 'zAsset-Latitude-35', - 'zExtAttr-Latitude-36', - 'zAsset-Longitude-37', - 'zExtAttr-Longitude-38', - 'zAddAssetAttr-Location Hash-39', - 'zAddAssetAttr-Shifted Location Valid-40', - 'zAddAssetAttr-Shifted Location Data-41', - 'zAddAssetAttr-Reverse Location Is Valid-42', - 'zAddAssetAttr-Reverse Location Data-43', - 'AAAzCldMastMedData-zOPT-44', - 'zAddAssetAttr-Media Metadata Type-45', - 'AAAzCldMastMedData-Data-46', - 'CldMasterzCldMastMedData-zOPT-47', - 'zCldMast-Media Metadata Type-48', - 'CMzCldMastMedData-Data-49', - ('zGenAlbum-Start Date-50', 'datetime'), - ('zGenAlbum-End Date-51', 'datetime'), - 'zGenAlbum-Album Kind-52', - 'zGenAlbum-Title-User&System Applied-53', - 'zGenAlbum- Import Session ID-54', - 'zGenAlbum-Cached Photos Count-55', - 'zGenAlbum-Cached Videos Count-56', - 'zGenAlbum-Cached Count-57', - 'zGenAlbum-Trashed State-58', - ('zGenAlbum-Trash Date-59', 'datetime'), - 'zGenAlbum-UUID-60', - 'zGenAlbum-Cloud GUID-61', - 'zAsset-zPK-62', - 'zAddAssetAttr-zPK-63', - 'zAsset-UUID = store.cloudphotodb-64', - 'zAddAssetAttr-Master Fingerprint-65') + 'zAddAssetAttr-Creator Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zAddAssetAttr-Imported by-18', + 'zCldMast-Imported by Bundle ID-19', + 'zCldMast-Imported by Display Name-20', + 'zCldMast-Imported By-21', + 'zAsset-Visibility State-22', + 'zExtAttr-Camera Make-23', + 'zExtAttr-Camera Model-24', + 'zExtAttr-Lens Model-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Share Type-28', + 'zCldMast-Cloud Local State-29', + ('zCldMast-Import Date-30', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', 'datetime'), + 'zAddAssetAttr-Import Session ID-32', + ('zAddAssetAttr-Alt Import Image Date-33', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-34', + ('zAsset-Cloud Batch Publish Date-35', 'datetime'), + ('zAsset-Cloud Server Publish Date-36', 'datetime'), + 'zAsset-Cloud Download Requests-37', + 'zAsset-Cloud Batch ID-38', + 'zAsset-Latitude-39', + 'zExtAttr-Latitude-40', + 'zAsset-Longitude-41', + 'zExtAttr-Longitude-42', + 'zAddAssetAttr-GPS Horizontal Accuracy-43', + 'zAddAssetAttr-Location Hash-44', + 'zAddAssetAttr-Shifted Location Valid-45', + 'zAddAssetAttr-Shifted Location Data-46', + 'zAddAssetAttr-Reverse Location Is Valid-47', + 'zAddAssetAttr-Reverse Location Data-48', + 'AAAzCldMastMedData-zOPT-49', + 'zAddAssetAttr-Media Metadata Type-50', + 'AAAzCldMastMedData-Data-51', + 'CldMasterzCldMastMedData-zOPT-52', + 'zCldMast-Media Metadata Type-53', + 'CMzCldMastMedData-Data-54', + ('zGenAlbum-Creation Date-55', 'datetime'), + ('zGenAlbum-Start Date-56', 'datetime'), + ('zGenAlbum-End Date-57', 'datetime'), + 'zGenAlbum-Album Kind-58', + 'zGenAlbum-Title-User&System Applied-59', + 'zGenAlbum- Import Session ID-60', + 'zGenAlbum-Creator Bundle Identifier-61', + 'zGenAlbum-Cached Photos Count-62', + 'zGenAlbum-Cached Videos Count-63', + 'zGenAlbum-Cached Count-64', + 'zGenAlbum-Trashed State-65', + ('zGenAlbum-Trash Date-66', 'datetime'), + 'zGenAlbum-UUID-67', + 'zGenAlbum-Cloud GUID-68', + 'zAsset-zPK-69', + 'zAddAssetAttr-zPK-70', + 'zAsset-UUID = store.cloudphotodb-71', + 'zAddAssetAttr-Master Fingerprint-72') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): + elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -3603,6 +4282,19 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' @@ -3622,8 +4314,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' END AS 'zAsset-Saved Asset Type', - zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr-Creator Bundle ID', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', CASE zAddAssetAttr.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -3758,6 +4450,13 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' ELSE 'CMzCldMastMedData-Data_Empty-NULL' END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', @@ -3777,8 +4476,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' END AS 'zGenAlbum-Album Kind', zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', - zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', - zGenAlbum.ZCREATORBUNDLEID AS 'zGenAlbum-Creator Bundle Identifier', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', @@ -3793,7 +4492,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES @@ -3803,10 +4502,12 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS + LEFT JOIN Z_27ASSETS z27Assets ON z27Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z27Assets.Z_27ALBUMS + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED ''' + db_records = get_sqlite_db_records(source_path, query) for row in db_records: data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], @@ -3816,7 +4517,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72])) + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77])) data_headers = (('zAsset-Date Created-0', 'datetime'), ('zAsset- SortToken -CameraRoll-1', 'datetime'), @@ -3831,71 +4533,76 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr 'zAsset-Filename-10', 'zAddAssetAttr- Original Filename-11', 'zCldMast- Original Filename-12', - ('zAsset-Trashed Date-13', 'datetime'), - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr-Creator Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zAddAssetAttr-Imported by-18', - 'zCldMast-Imported by Bundle ID-19', - 'zCldMast-Imported by Display Name-20', - 'zCldMast-Imported By-21', - 'zAsset-Visibility State-22', - 'zExtAttr-Camera Make-23', - 'zExtAttr-Camera Model-24', - 'zExtAttr-Lens Model-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Share Type-28', - 'zCldMast-Cloud Local State-29', - ('zCldMast-Import Date-30', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', 'datetime'), - 'zAddAssetAttr-Import Session ID-32', - ('zAddAssetAttr-Alt Import Image Date-33', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-34', - ('zAsset-Cloud Batch Publish Date-35', 'datetime'), - ('zAsset-Cloud Server Publish Date-36', 'datetime'), - 'zAsset-Cloud Download Requests-37', - 'zAsset-Cloud Batch ID-38', - 'zAsset-Latitude-39', - 'zExtAttr-Latitude-40', - 'zAsset-Longitude-41', - 'zExtAttr-Longitude-42', - 'zAddAssetAttr-GPS Horizontal Accuracy-43', - 'zAddAssetAttr-Location Hash-44', - 'zAddAssetAttr-Shifted Location Valid-45', - 'zAddAssetAttr-Shifted Location Data-46', - 'zAddAssetAttr-Reverse Location Is Valid-47', - 'zAddAssetAttr-Reverse Location Data-48', - 'AAAzCldMastMedData-zOPT-49', - 'zAddAssetAttr-Media Metadata Type-50', - 'AAAzCldMastMedData-Data-51', - 'CldMasterzCldMastMedData-zOPT-52', - 'zCldMast-Media Metadata Type-53', - 'CMzCldMastMedData-Data-54', - ('zGenAlbum-Creation Date-55', 'datetime'), - ('zGenAlbum-Start Date-56', 'datetime'), - ('zGenAlbum-End Date-57', 'datetime'), - 'zGenAlbum-Album Kind-58', - 'zGenAlbum-Title-User&System Applied-59', - 'zGenAlbum- Import Session ID-60', - 'zGenAlbum-Creator Bundle Identifier-61', - 'zGenAlbum-Cached Photos Count-62', - 'zGenAlbum-Cached Videos Count-63', - 'zGenAlbum-Cached Count-64', - 'zGenAlbum-Trashed State-65', - ('zGenAlbum-Trash Date-66', 'datetime'), - 'zGenAlbum-UUID-67', - 'zGenAlbum-Cloud GUID-68', - 'zAsset-zPK-69', - 'zAddAssetAttr-zPK-70', - 'zAsset-UUID = store.cloudphotodb-71', - 'zAddAssetAttr-Master Fingerprint-72') + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset- Conversation= zGenAlbum_zPK-14', + 'SWYConverszGenAlbum- Import Session ID-15', + 'zAsset-Syndication State-16', + ('zAsset-Trashed Date-17', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Imported by Bundle ID-20', + 'zAddAssetAttr-Imported By Display Name-21', + 'zAddAssetAttr-Imported by-22', + 'zCldMast-Imported by Bundle ID-23', + 'zCldMast-Imported by Display Name-24', + 'zCldMast-Imported By-25', + 'zAsset-Visibility State-26', + 'zExtAttr-Camera Make-27', + 'zExtAttr-Camera Model-28', + 'zExtAttr-Lens Model-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAddAssetAttr-Share Type-32', + 'zCldMast-Cloud Local State-33', + ('zCldMast-Import Date-34', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', 'datetime'), + 'zAddAssetAttr-Import Session ID-36', + ('zAddAssetAttr-Alt Import Image Date-37', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-38', + ('zAsset-Cloud Batch Publish Date-39', 'datetime'), + ('zAsset-Cloud Server Publish Date-40', 'datetime'), + 'zAsset-Cloud Download Requests-41', + 'zAsset-Cloud Batch ID-42', + 'zAsset-Latitude-43', + 'zExtAttr-Latitude-44', + 'zAsset-Longitude-45', + 'zExtAttr-Longitude-46', + 'zAddAssetAttr-GPS Horizontal Accuracy-47', + 'zAddAssetAttr-Location Hash-48', + 'zAddAssetAttr-Shifted Location Valid-49', + 'zAddAssetAttr-Shifted Location Data-50', + 'zAddAssetAttr-Reverse Location Is Valid-51', + 'zAddAssetAttr-Reverse Location Data-52', + 'AAAzCldMastMedData-zOPT-53', + 'zAddAssetAttr-Media Metadata Type-54', + 'AAAzCldMastMedData-Data-55', + 'CldMasterzCldMastMedData-zOPT-56', + 'zCldMast-Media Metadata Type-57', + 'CMzCldMastMedData-Data-58', + 'zAsset-Bundle Scope-59', + ('zGenAlbum-Creation Date-60', 'datetime'), + ('zGenAlbum-Start Date-61', 'datetime'), + ('zGenAlbum-End Date-62', 'datetime'), + 'zGenAlbum-Album Kind-63', + 'zGenAlbum-Title-User&System Applied-64', + 'zGenAlbum- Import Session ID-65', + 'zGenAlbum-Imported by Bundle Identifier-66', + 'zGenAlbum-Cached Photos Count-67', + 'zGenAlbum-Cached Videos Count-68', + 'zGenAlbum-Cached Count-69', + 'zGenAlbum-Trashed State-70', + ('zGenAlbum-Trash Date-71', 'datetime'), + 'zGenAlbum-UUID-72', + 'zGenAlbum-Cloud GUID-73', + 'zAsset-zPK-74', + 'zAddAssetAttr-zPK-75', + 'zAsset-UUID = store.cloudphotodb-76', + 'zAddAssetAttr-Master Fingerprint-77') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -3936,6 +4643,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -4124,21 +4832,26 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', zGenAlbum.ZUUID AS 'zGenAlbum-UUID', zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN Z_27ASSETS z27Assets ON z27Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z27Assets.Z_27ALBUMS LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED ''' @@ -4153,7 +4866,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77])) + row[73], row[74], row[75], row[76], row[77], row[78], row[79])) data_headers = (('zAsset-Date Created-0', 'datetime'), ('zAsset- SortToken -CameraRoll-1', 'datetime'), @@ -4174,70 +4887,72 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr 'zAsset-Syndication State-16', ('zAsset-Trashed Date-17', 'datetime'), 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', - 'zAsset-Saved Asset Type-19', - 'zAddAssetAttr-Imported by Bundle ID-20', - 'zAddAssetAttr-Imported By Display Name-21', - 'zAddAssetAttr-Imported by-22', - 'zCldMast-Imported by Bundle ID-23', - 'zCldMast-Imported by Display Name-24', - 'zCldMast-Imported By-25', - 'zAsset-Visibility State-26', - 'zExtAttr-Camera Make-27', - 'zExtAttr-Camera Model-28', - 'zExtAttr-Lens Model-29', - 'zAsset-Derived Camera Capture Device-30', - 'zAddAssetAttr-Camera Captured Device-31', - 'zAddAssetAttr-Share Type-32', - 'zCldMast-Cloud Local State-33', - ('zCldMast-Import Date-34', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', 'datetime'), - 'zAddAssetAttr-Import Session ID-36', - ('zAddAssetAttr-Alt Import Image Date-37', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-38', - ('zAsset-Cloud Batch Publish Date-39', 'datetime'), - ('zAsset-Cloud Server Publish Date-40', 'datetime'), - 'zAsset-Cloud Download Requests-41', - 'zAsset-Cloud Batch ID-42', - 'zAsset-Latitude-43', - 'zExtAttr-Latitude-44', - 'zAsset-Longitude-45', - 'zExtAttr-Longitude-46', - 'zAddAssetAttr-GPS Horizontal Accuracy-47', - 'zAddAssetAttr-Location Hash-48', - 'zAddAssetAttr-Shifted Location Valid-49', - 'zAddAssetAttr-Shifted Location Data-50', - 'zAddAssetAttr-Reverse Location Is Valid-51', - 'zAddAssetAttr-Reverse Location Data-52', - 'AAAzCldMastMedData-zOPT-53', - 'zAddAssetAttr-Media Metadata Type-54', - 'AAAzCldMastMedData-Data-55', - 'CldMasterzCldMastMedData-zOPT-56', - 'zCldMast-Media Metadata Type-57', - 'CMzCldMastMedData-Data-58', - 'zAsset-Bundle Scope-59', - ('zGenAlbum-Creation Date-60', 'datetime'), - ('zGenAlbum-Start Date-61', 'datetime'), - ('zGenAlbum-End Date-62', 'datetime'), - 'zGenAlbum-Album Kind-63', - 'zGenAlbum-Title-User&System Applied-64', - 'zGenAlbum- Import Session ID-65', - 'zGenAlbum-Imported by Bundle Identifier-66', - 'zGenAlbum-Cached Photos Count-67', - 'zGenAlbum-Cached Videos Count-68', - 'zGenAlbum-Cached Count-69', - 'zGenAlbum-Trashed State-70', - ('zGenAlbum-Trash Date-71', 'datetime'), - 'zGenAlbum-UUID-72', - 'zGenAlbum-Cloud GUID-73', - 'zAsset-zPK-74', - 'zAddAssetAttr-zPK-75', - 'zAsset-UUID = store.cloudphotodb-76', - 'zAddAssetAttr-Master Fingerprint-77') + 'zAsset-Trashed by Participant= zShareParticipant_zPK-19', + 'zAsset-Saved Asset Type-20', + 'zAddAssetAttr-Imported by Bundle ID-21', + 'zAddAssetAttr-Imported By Display Name-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported by Bundle ID-24', + 'zCldMast-Imported by Display Name-25', + 'zCldMast-Imported By-26', + 'zAsset-Visibility State-27', + 'zExtAttr-Camera Make-28', + 'zExtAttr-Camera Model-29', + 'zExtAttr-Lens Model-30', + 'zAsset-Derived Camera Capture Device-31', + 'zAddAssetAttr-Camera Captured Device-32', + 'zAddAssetAttr-Share Type-33', + 'zCldMast-Cloud Local State-34', + ('zCldMast-Import Date-35', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', 'datetime'), + 'zAddAssetAttr-Import Session ID-37', + ('zAddAssetAttr-Alt Import Image Date-38', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-39', + ('zAsset-Cloud Batch Publish Date-40', 'datetime'), + ('zAsset-Cloud Server Publish Date-41', 'datetime'), + ('zAsset-Cloud Download Requests-42', 'datetime'), + 'zAsset-Cloud Batch ID-43', + 'zAsset-Latitude-44', + 'zExtAttr-Latitude-45', + 'zAsset-Longitude-46', + 'zExtAttr-Longitude-47', + 'zAddAssetAttr-GPS Horizontal Accuracy-48', + 'zAddAssetAttr-Location Hash-49', + 'zAddAssetAttr-Shifted Location Valid-50', + 'zAddAssetAttr-Shifted Location Data-51', + 'zAddAssetAttr-Reverse Location Is Valid-52', + 'zAddAssetAttr-Reverse Location Data-53', + 'AAAzCldMastMedData-zOPT-54', + 'zAddAssetAttr-Media Metadata Type-55', + 'AAAzCldMastMedData-Data-56', + 'CldMasterzCldMastMedData-zOPT-57', + 'zCldMast-Media Metadata Type-58', + 'CMzCldMastMedData-Data-59', + 'zAsset-Bundle Scope-60', + ('zGenAlbum-Creation Date-61', 'datetime'), + ('zGenAlbum-Start Date-62', 'datetime'), + ('zGenAlbum-End Date-63', 'datetime'), + 'zGenAlbum-Album Kind-64', + 'zGenAlbum-Title-User&System Applied-65', + 'zGenAlbum- Import Session ID-66', + 'zGenAlbum-Imported by Bundle Identifier-67', + 'zGenAlbum-Cached Photos Count-68', + 'zGenAlbum-Cached Videos Count-69', + 'zGenAlbum-Cached Count-70', + 'zGenAlbum-Trashed State-71', + ('zGenAlbum-Trash Date-72', 'datetime'), + 'zGenAlbum-UUID-73', + 'zGenAlbum-Cloud GUID-74', + 'zAsset-Active Library Scope Participation State-75', + 'zAsset-zPK-76', + 'zAddAssetAttr-zPK-77', + 'zAsset-UUID = store.cloudphotodb-78', + 'zAddAssetAttr-Master Fingerprint-79') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): + elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -4255,6 +4970,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', @@ -4475,10 +5191,9 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON - zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS @@ -4498,96 +5213,97 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79])) - - data_headers = (('zAsset-Date Created-0', 'datetime'), - ('zAsset- SortToken -CameraRoll-1', 'datetime'), - ('zAsset-Added Date-2', 'datetime'), - ('zCldMast-Creation Date-3', 'datetime'), - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - ('zAsset-Modification Date-7', 'datetime'), - ('zAsset-Last Shared Date-8', 'datetime'), - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAsset- Conversation= zGenAlbum_zPK-14', - 'SWYConverszGenAlbum- Import Session ID-15', - 'zAsset-Syndication State-16', - ('zAsset-Trashed Date-17', 'datetime'), - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-19', - 'zAsset-Saved Asset Type-20', - 'zAddAssetAttr-Imported by Bundle ID-21', - 'zAddAssetAttr-Imported By Display Name-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported by Bundle ID-24', - 'zCldMast-Imported by Display Name-25', - 'zCldMast-Imported By-26', - 'zAsset-Visibility State-27', - 'zExtAttr-Camera Make-28', - 'zExtAttr-Camera Model-29', - 'zExtAttr-Lens Model-30', - 'zAsset-Derived Camera Capture Device-31', - 'zAddAssetAttr-Camera Captured Device-32', - 'zAddAssetAttr-Share Type-33', - 'zCldMast-Cloud Local State-34', - ('zCldMast-Import Date-35', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', 'datetime'), - 'zAddAssetAttr-Import Session ID-37', - ('zAddAssetAttr-Alt Import Image Date-38', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-39', - ('zAsset-Cloud Batch Publish Date-40', 'datetime'), - ('zAsset-Cloud Server Publish Date-41', 'datetime'), - ('zAsset-Cloud Download Requests-42', 'datetime'), - 'zAsset-Cloud Batch ID-43', - 'zAsset-Latitude-44', - 'zExtAttr-Latitude-45', - 'zAsset-Longitude-46', - 'zExtAttr-Longitude-47', - 'zAddAssetAttr-GPS Horizontal Accuracy-48', - 'zAddAssetAttr-Location Hash-49', - 'zAddAssetAttr-Shifted Location Valid-50', - 'zAddAssetAttr-Shifted Location Data-51', - 'zAddAssetAttr-Reverse Location Is Valid-52', - 'zAddAssetAttr-Reverse Location Data-53', - 'AAAzCldMastMedData-zOPT-54', - 'zAddAssetAttr-Media Metadata Type-55', - 'AAAzCldMastMedData-Data-56', - 'CldMasterzCldMastMedData-zOPT-57', - 'zCldMast-Media Metadata Type-58', - 'CMzCldMastMedData-Data-59', - 'zAsset-Bundle Scope-60', - ('zGenAlbum-Creation Date-61', 'datetime'), - ('zGenAlbum-Start Date-62', 'datetime'), - ('zGenAlbum-End Date-63', 'datetime'), - 'zGenAlbum-Album Kind-64', - 'zGenAlbum-Title-User&System Applied-65', - 'zGenAlbum- Import Session ID-66', - 'zGenAlbum-Imported by Bundle Identifier-67', - 'zGenAlbum-Cached Photos Count-68', - 'zGenAlbum-Cached Videos Count-69', - 'zGenAlbum-Cached Count-70', - 'zGenAlbum-Trashed State-71', - ('zGenAlbum-Trash Date-72', 'datetime'), - 'zGenAlbum-UUID-73', - 'zGenAlbum-Cloud GUID-74', - 'zAsset-Active Library Scope Participation State-75', - 'zAsset-zPK-76', - 'zAddAssetAttr-zPK-77', - 'zAsset-UUID = store.cloudphotodb-78', - 'zAddAssetAttr-Master Fingerprint-79') + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Saved Asset Type-21', + 'zAddAssetAttr-Imported by Bundle ID-22', + 'zAddAssetAttr-Imported By Display Name-23', + 'zAddAssetAttr-Imported by-24', + 'zCldMast-Imported by Bundle ID-25', + 'zCldMast-Imported by Display Name-26', + 'zCldMast-Imported By-27', + 'zAsset-Visibility State-28', + 'zExtAttr-Camera Make-29', + 'zExtAttr-Camera Model-30', + 'zExtAttr-Lens Model-31', + 'zAsset-Derived Camera Capture Device-32', + 'zAddAssetAttr-Camera Captured Device-33', + 'zAddAssetAttr-Share Type-34', + 'zCldMast-Cloud Local State-35', + ('zCldMast-Import Date-36', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'), + 'zAddAssetAttr-Import Session ID-38', + ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-40', + ('zAsset-Cloud Batch Publish Date-41', 'datetime'), + ('zAsset-Cloud Server Publish Date-42', 'datetime'), + 'zAsset-Cloud Download Requests-43', + 'zAsset-Cloud Batch ID-44', + 'zAsset-Latitude-45', + 'zExtAttr-Latitude-46', + 'zAsset-Longitude-47', + 'zExtAttr-Longitude-48', + 'zAddAssetAttr-GPS Horizontal Accuracy-49', + 'zAddAssetAttr-Location Hash-50', + 'zAddAssetAttr-Shifted Location Valid-51', + 'zAddAssetAttr-Shifted Location Data-52', + 'zAddAssetAttr-Reverse Location Is Valid-53', + 'zAddAssetAttr-Reverse Location Data-54', + 'AAAzCldMastMedData-zOPT-55', + 'zAddAssetAttr-Media Metadata Type-56', + 'AAAzCldMastMedData-Data-57', + 'CldMasterzCldMastMedData-zOPT-58', + 'zCldMast-Media Metadata Type-59', + 'CMzCldMastMedData-Data-60', + 'zAsset-Bundle Scope-61', + ('zGenAlbum-Creation Date-62', 'datetime'), + ('zGenAlbum-Start Date-63', 'datetime'), + ('zGenAlbum-End Date-64', 'datetime'), + 'zGenAlbum-Album Kind-65', + 'zGenAlbum-Title-User&System Applied-66', + 'zGenAlbum- Import Session ID-67', + 'zGenAlbum-Imported by Bundle Identifier-68', + 'zGenAlbum-Cached Photos Count-69', + 'zGenAlbum-Cached Videos Count-70', + 'zGenAlbum-Cached Count-71', + 'zGenAlbum-Trashed State-72', + ('zGenAlbum-Trash Date-73', 'datetime'), + 'zGenAlbum-UUID-74', + 'zGenAlbum-Cloud GUID-75', + 'zAsset-Active Library Scope Participation State-76', + 'zAsset-zPK-77', + 'zAddAssetAttr-zPK-78', + 'zAsset-UUID = store.cloudphotodb-79', + 'zAddAssetAttr-Master Fingerprint-80') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -4830,8 +5546,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA @@ -4937,8 +5653,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - - elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -4956,7 +5672,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', @@ -4981,6 +5697,11 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -5047,7 +5768,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' - END AS 'zAddAssetAttr-Camera Captured Device', + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', CASE zAddAssetAttr.ZSHARETYPE WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' @@ -5177,12 +5899,13 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA @@ -5195,14 +5918,15 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr db_records = get_sqlite_db_records(source_path, query) for row in db_records: data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80])) + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83])) data_headers = (('zAsset-Date Created-0', 'datetime'), ('zAsset- SortToken -CameraRoll-1', 'datetime'), @@ -5225,71 +5949,74 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr ('zAsset-Trashed Date-18', 'datetime'), 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', - 'zAsset-Saved Asset Type-21', - 'zAddAssetAttr-Imported by Bundle ID-22', - 'zAddAssetAttr-Imported By Display Name-23', - 'zAddAssetAttr-Imported by-24', - 'zCldMast-Imported by Bundle ID-25', - 'zCldMast-Imported by Display Name-26', - 'zCldMast-Imported By-27', - 'zAsset-Visibility State-28', - 'zExtAttr-Camera Make-29', - 'zExtAttr-Camera Model-30', - 'zExtAttr-Lens Model-31', - 'zAsset-Derived Camera Capture Device-32', - 'zAddAssetAttr-Camera Captured Device-33', - 'zAddAssetAttr-Share Type-34', - 'zCldMast-Cloud Local State-35', - ('zCldMast-Import Date-36', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'), - 'zAddAssetAttr-Import Session ID-38', - ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-40', - ('zAsset-Cloud Batch Publish Date-41', 'datetime'), - ('zAsset-Cloud Server Publish Date-42', 'datetime'), - 'zAsset-Cloud Download Requests-43', - 'zAsset-Cloud Batch ID-44', - 'zAsset-Latitude-45', - 'zExtAttr-Latitude-46', - 'zAsset-Longitude-47', - 'zExtAttr-Longitude-48', - 'zAddAssetAttr-GPS Horizontal Accuracy-49', - 'zAddAssetAttr-Location Hash-50', - 'zAddAssetAttr-Shifted Location Valid-51', - 'zAddAssetAttr-Shifted Location Data-52', - 'zAddAssetAttr-Reverse Location Is Valid-53', - 'zAddAssetAttr-Reverse Location Data-54', - 'AAAzCldMastMedData-zOPT-55', - 'zAddAssetAttr-Media Metadata Type-56', - 'AAAzCldMastMedData-Data-57', - 'CldMasterzCldMastMedData-zOPT-58', - 'zCldMast-Media Metadata Type-59', - 'CMzCldMastMedData-Data-60', - 'zAsset-Bundle Scope-61', - ('zGenAlbum-Creation Date-62', 'datetime'), - ('zGenAlbum-Start Date-63', 'datetime'), - ('zGenAlbum-End Date-64', 'datetime'), - 'zGenAlbum-Album Kind-65', - 'zGenAlbum-Title-User&System Applied-66', - 'zGenAlbum- Import Session ID-67', - 'zGenAlbum-Imported by Bundle Identifier-68', - 'zGenAlbum-Cached Photos Count-69', - 'zGenAlbum-Cached Videos Count-70', - 'zGenAlbum-Cached Count-71', - 'zGenAlbum-Trashed State-72', - ('zGenAlbum-Trash Date-73', 'datetime'), - 'zGenAlbum-UUID-74', - 'zGenAlbum-Cloud GUID-75', - 'zAsset-Active Library Scope Participation State-76', - 'zAsset-zPK-77', - 'zAddAssetAttr-zPK-78', - 'zAsset-UUID = store.cloudphotodb-79', - 'zAddAssetAttr-Master Fingerprint-80') + 'zAsset-Is_Recently_Saved-21', + 'zAsset-Saved Asset Type-22', + 'zAddAssetAttr-Imported by Bundle ID-23', + 'zAddAssetAttr-Imported By Display Name-24', + 'zAddAssetAttr-Imported by-25', + 'zCldMast-Imported by Bundle ID-26', + 'zCldMast-Imported by Display Name-27', + 'zCldMast-Imported By-28', + 'zAsset-Visibility State-29', + 'zExtAttr-Camera Make-30', + 'zExtAttr-Camera Model-31', + 'zExtAttr-Lens Model-32', + 'zAsset-Derived Camera Capture Device-33', + 'zAddAssetAttr-Camera Captured Device-34', + 'zAsset-Capture_Session_Identifier-35', + 'zAddAssetAttr-Share Type-36', + 'zCldMast-Cloud Local State-37', + ('zCldMast-Import Date-38', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'), + 'zAddAssetAttr-Import Session ID-40', + ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-42', + ('zAsset-Cloud Batch Publish Date-43', 'datetime'), + ('zAsset-Cloud Server Publish Date-44', 'datetime'), + 'zAsset-Cloud Download Requests-45', + 'zAsset-Cloud Batch ID-46', + 'zAsset-Latitude-47', + 'zExtAttr-Latitude-48', + 'zAsset-Longitude-49', + 'zExtAttr-Longitude-50', + 'zAddAssetAttr-GPS Horizontal Accuracy-51', + 'zAddAssetAttr-Location Hash-52', + 'zAddAssetAttr-Shifted Location Valid-53', + 'zAddAssetAttr-Shifted Location Data-54', + 'zAddAssetAttr-Reverse Location Is Valid-55', + 'zAddAssetAttr-Reverse Location Data-56', + 'AAAzCldMastMedData-zOPT-57', + 'zAddAssetAttr-Media Metadata Type-58', + 'AAAzCldMastMedData-Data-59', + 'CldMasterzCldMastMedData-zOPT-60', + 'zCldMast-Media Metadata Type-61', + 'CMzCldMastMedData-Data-62', + 'zAsset-Bundle Scope-63', + ('zGenAlbum-Creation Date-64', 'datetime'), + ('zGenAlbum-Start Date-65', 'datetime'), + ('zGenAlbum-End Date-66', 'datetime'), + 'zGenAlbum-Album Kind-67', + 'zGenAlbum-Title-User&System Applied-68', + 'zGenAlbum- Import Session ID-69', + 'zGenAlbum-Imported by Bundle Identifier-70', + 'zGenAlbum-Cached Photos Count-71', + 'zGenAlbum-Cached Videos Count-72', + 'zGenAlbum-Cached Count-73', + 'zGenAlbum-Trashed State-74', + ('zGenAlbum-Trash Date-75', 'datetime'), + 'zGenAlbum-UUID-76', + 'zGenAlbum-Cloud GUID-77', + 'zAsset-Active Library Scope Participation State-78', + 'zAsset-zPK-79', + 'zAddAssetAttr-zPK-80', + 'zAsset-UUID = store.cloudphotodb-81', + 'zAddAssetAttr-Original Stable Hash-82', + 'zAddAssetAttr.Adjusted Stable Hash-83') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - - elif version.parse(iosversion) >= version.parse("18"): + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -5539,8 +6266,8 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA @@ -5652,7 +6379,7 @@ def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wr return data_headers, data_list, source_path @artifact_processor -def Ph2_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph002_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -5662,10 +6389,10 @@ def Ph2_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wrap_ if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -5915,8 +6642,8 @@ def Ph2_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wrap_ FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA diff --git a/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py b/scripts/artifacts/Ph003TrashedRemovedfromCamRoll.py similarity index 94% rename from scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py rename to scripts/artifacts/Ph003TrashedRemovedfromCamRoll.py index 8f3fc269b..7bf3adc5f 100644 --- a/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py +++ b/scripts/artifacts/Ph003TrashedRemovedfromCamRoll.py @@ -1,45 +1,48 @@ __artifacts_v2__ = { - 'Ph3_1TrashedRecentlyDeletedPhDaPsql': { - 'name': 'Ph3.1-Trashed Recently Deleted-PhDaPsql', + 'Ph003_1TrashedRecentlyDeletedPhDaPsql': { + 'name': 'Ph003.1-Trashed Recently Deleted-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for trashed-recently deleted' - ' assets and supports iOS 11-18. The results for this script will contain one row' - ' per ZASSET table Z_PK value.', + ' assets and supports various iOS versions. The results for this script will contain one row' + ' per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-Assets-Trashed-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "trash-2" }, - 'Ph3_2RemovedfromCameraRollSyndPL': { - 'name': 'Ph3.2-Removed from Camera Roll-SyndPL', + 'Ph003_2RemovedfromCameraRollSyndPL': { + 'name': 'Ph003.2-Removed from Camera Roll-SyndPL', 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite' - ' for syndication PL asserts remvoed from camera roll and supports iOS 15-18.' + ' for syndication PL asserts remvoed from camera roll and supports supports various iOS versions.' ' These assets may have been displayed in the camera roll, then deleted from' - ' the camera roll view. The results for this script will contain one row per asset.', + ' the camera roll view. The results for this script will contain one row per asset.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-Trashed-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "delete" }, - 'Ph3_3TrashedRecentlyDeletedGenPlayPsql': { - 'name': 'Ph3.3-Trashed Recently Deleted-GenPlayPsql', + 'Ph003_3TrashedRecentlyDeletedGenPlayPsql': { + 'name': 'Ph003.3-Trashed Recently Deleted-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for trashed-recently deleted' - ' assets and supports iOS 18. The results for this script will contain one row' - ' per ZASSET table Z_PK value.', + ' assets and supports various iOS versions. The results for this script will contain one row' + ' per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains GenPlay-Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-Trashed-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -52,7 +55,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph3_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph003_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -62,7 +65,7 @@ def Ph3_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -306,7 +309,7 @@ def Ph3_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -384,7 +387,7 @@ def Ph3_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path @artifact_processor -def Ph3_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph003_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -394,7 +397,7 @@ def Ph3_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_te if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): + if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): @@ -542,7 +545,7 @@ def Ph3_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_te return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -620,7 +623,7 @@ def Ph3_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_te return data_headers, data_list, source_path @artifact_processor -def Ph3_3TrashedRecentlyDeletedGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph003_3TrashedRecentlyDeletedGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -630,10 +633,10 @@ def Ph3_3TrashedRecentlyDeletedGenPlayPsql(files_found, report_folder, seeker, w if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph4Hidden.py b/scripts/artifacts/Ph004Hidden.py similarity index 90% rename from scripts/artifacts/Ph4Hidden.py rename to scripts/artifacts/Ph004Hidden.py index 580477667..0a52e1d41 100644 --- a/scripts/artifacts/Ph4Hidden.py +++ b/scripts/artifacts/Ph004Hidden.py @@ -1,29 +1,31 @@ __artifacts_v2__ = { - 'Ph4_1HiddenPhDaPsql': { - 'name': 'Ph4.1-Hidden-PhDaPsql', + 'Ph004_1HiddenPhDaPsql': { + 'name': 'Ph004.1-Hidden-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for hidden assets' - ' and supports iOS 11-18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports various iOS versions. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-Assets-Hidden-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "eye-off" }, - 'Ph4_3HiddenGenPlayPsql': { - 'name': 'Ph4.3-Hidden-GenPlayPsql', + 'Ph004_3HiddenGenPlayPsql': { + 'name': 'Ph004.3-Hidden-GenPlayPsql', 'description': 'Parses basic asset row data from GenerativePlayground-Photos.sqlite for hidden assets' - ' and supports iOS 18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and upports various iOS versions. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-05', 'requirements': 'Acquisition that contains GenerativePlayground-Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-Hidden-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -36,7 +38,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph4_1HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph004_1HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -46,7 +48,7 @@ def Ph4_1HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_ if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -204,7 +206,7 @@ def Ph4_1HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_ return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -260,7 +262,7 @@ def Ph4_1HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_ return data_headers, data_list, source_path @artifact_processor -def Ph4_3HiddenGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph004_3HiddenGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -270,10 +272,10 @@ def Ph4_3HiddenGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezo if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenerativePlayground-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph5HasLocations.py b/scripts/artifacts/Ph005HasLocations.py similarity index 97% rename from scripts/artifacts/Ph5HasLocations.py rename to scripts/artifacts/Ph005HasLocations.py index 109163c5d..c8d75c0f2 100644 --- a/scripts/artifacts/Ph5HasLocations.py +++ b/scripts/artifacts/Ph005HasLocations.py @@ -1,47 +1,50 @@ __artifacts_v2__ = { - 'Ph5_1AssetshavevalidlocationsPhDaPsql': { - 'name': 'Ph5.1-Assets have valid locations-PhDaPsql', + 'Ph005_1AssetshavevalidlocationsPhDaPsql': { + 'name': 'Ph005.1-Assets have valid locations-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets that have valid' ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' - ' and supports iOS 11-18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports various iOS versions. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', + 'category': 'Photos.sqlite-Assets-withLocations-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "map-pin" }, - 'Ph5_2AssetshavevalidlocationsSyndPL': { - 'name': 'Ph5.2-Assets have valid locations-SyndPL', + 'Ph005_2AssetshavevalidlocationsSyndPL': { + 'name': 'Ph005.2-Assets have valid locations-SyndPL', 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite' ' for assets that have valid locations from the ZASSET and ZEXTENDEDATTRIBUTES table' - ' ZLATITUDE fields and supports iOS 11-18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' ZLATITUDE fields and supports various iOS versions. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-withLocations-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "map-pin" }, - 'Ph5_3AssetshavevalidlocationsGenPlayPsql': { - 'name': 'Ph5.3-Assets have valid locations-GenPlayPsql', + 'Ph005_3AssetshavevalidlocationsGenPlayPsql': { + 'name': 'Ph005.3-Assets have valid locations-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for assets that have valid' ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' - ' and supports iOS 11-18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports various iOS versions. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-withLocations-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -56,7 +59,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph5_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph005_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -66,7 +69,7 @@ def Ph5_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wr if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): @@ -688,7 +691,7 @@ def Ph5_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wr return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -865,7 +868,7 @@ def Ph5_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wr return data_headers, data_list, source_path @artifact_processor -def Ph5_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph005_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -875,7 +878,7 @@ def Ph5_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): @@ -1497,7 +1500,7 @@ def Ph5_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1674,7 +1677,7 @@ def Ph5_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path @artifact_processor -def Ph5_3AssetshavevalidlocationsGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph005_3AssetshavevalidlocationsGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -1684,10 +1687,10 @@ def Ph5_3AssetshavevalidlocationsGenPlayPsql(files_found, report_folder, seeker, if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph6ViewedPlayData.py b/scripts/artifacts/Ph006ViewedPlayData.py similarity index 52% rename from scripts/artifacts/Ph6ViewedPlayData.py rename to scripts/artifacts/Ph006ViewedPlayData.py index c5ee6e23f..227922ba6 100644 --- a/scripts/artifacts/Ph6ViewedPlayData.py +++ b/scripts/artifacts/Ph006ViewedPlayData.py @@ -1,33 +1,53 @@ __artifacts_v2__ = { - 'Ph6_1ViewandPlayDataPhDaPsql': { - 'name': 'Ph6.1-View and Play Data-PhDaPsql', + 'Ph006_1ViewandPlayDataPhDaPsql': { + 'name': 'Ph006.1-View and Play Data-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets with' - ' view and played data in versions 11-18. If the iOS version is greater than iOS 16.5' + ' view and played data in iOS. If the iOS version is greater than iOS 16.5' ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' ' will be included. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-Assets-ViewPlay-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "eye" }, - 'Ph6_3ViewandPlayDataGenPlayPsql': { - 'name': 'Ph6.3-View and Play Data-GenPlayPsql', - 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for assets with' - ' view and played data in versions 18. If the iOS version is greater than iOS 16.5' + 'Ph006_2ViewandPlayDataSyndPL': { + 'name': 'Ph006.3-View and Play Data-SyndPL', + 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite for assets with' + ' view and played data in iOS. If the iOS version is greater than iOS 16.5' ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' ' will be included. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '1.0', - 'date': '2025-02-05', + 'date': '2026-05-26', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-Assets-ViewPlay-SyndicationPL-Psql', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"], + "artifact_icon": "eye" + }, + 'Ph006_3ViewandPlayDataGenPlayPsql': { + 'name': 'Ph006.3-View and Play Data-GenPlayPsql', + 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for assets with' + ' view and played data in iOS. If the iOS version is greater than iOS 16.5' + ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' + ' will be included. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', + 'author': 'Scott Koenig', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-ViewPlay-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -40,7 +60,437 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph6_1ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph006_1ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): + logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZGENERICASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) + OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZGENERICASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) + OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) + OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) + OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAddAssetAttr- Syndication Identifier-SWY-Files', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) <= version.parse("16.5.1")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) + OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAddAssetAttr- Syndication Identifier-SWY-Files', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) + OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16])) + + data_headers = (('zAddAssetAttr-Last Viewed Date-0', 'datetime'), + 'zAsset-Modification Date-1', + ('zAsset-Analysis State Modification Date-2', 'datetime'), + 'zAddAssetAttr- Pending View Count-3', + 'zAddAssetAttr- View Count-4', + 'zAddAssetAttr- Pending Play Count-5', + 'zAddAssetAttr- Play Count-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zCldMast-Import Session ID- AirDrop-StillTesting-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-zPK-13', + 'zAddAssetAttr-zPK-14', + 'zAsset-UUID = store.cloudphotodb-15', + 'zAddAssetAttr-Master Fingerprint-16') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr.View_Presentation', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) + OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) + ORDER BY zAsset.ZMODIFICATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) + + data_headers = (('zAddAssetAttr-Last Viewed Date-0', 'datetime'), + 'zAsset-Modification Date-1', + ('zAsset-Analysis State Modification Date-2', 'datetime'), + 'zAddAssetAttr- Pending View Count-3', + 'zAddAssetAttr- View Count-4', + 'zAddAssetAttr- Pending Play Count-5', + 'zAddAssetAttr- Play Count-6', + 'zAddAssetAttr.View_Presentation-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zCldMast-Import Session ID- AirDrop-StillTesting-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset-zPK-14', + 'zAddAssetAttr-zPK-15', + 'zAsset-UUID = store.cloudphotodb-16', + 'zAddAssetAttr-Original Stable Hash-17', + 'zAddAssetAttr.Adjusted Stable Hash-18') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph006_2ViewandPlayDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -50,7 +500,7 @@ def Ph6_1ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): @@ -400,7 +850,7 @@ def Ph6_1ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -470,7 +920,7 @@ def Ph6_1ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, return data_headers, data_list, source_path @artifact_processor -def Ph6_3ViewandPlayDataGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph006_3ViewandPlayDataGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -480,10 +930,10 @@ def Ph6_3ViewandPlayDataGenPlayPsql(files_found, report_folder, seeker, wrap_tex if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph7Favorite.py b/scripts/artifacts/Ph007Favorite.py similarity index 90% rename from scripts/artifacts/Ph7Favorite.py rename to scripts/artifacts/Ph007Favorite.py index e8fd00ee4..e18b92a86 100644 --- a/scripts/artifacts/Ph7Favorite.py +++ b/scripts/artifacts/Ph007Favorite.py @@ -1,29 +1,31 @@ __artifacts_v2__ = { - 'Ph7_1FavoritePhDaPsql': { - 'name': 'Ph7.1-Favorite-PhDaPsql', + 'Ph007_1FavoritePhDaPsql': { + 'name': 'Ph007.1-Favorite-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for favorite assets' - ' and supports iOS 11-18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports iOS. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-Assets-Favorite-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "heart" }, - 'Ph7_3FavoriteGenPlayPsql': { - 'name': 'Ph7.3-Favorite-GenPlayPsql', + 'Ph007_3FavoriteGenPlayPsql': { + 'name': 'Ph007.3-Favorite-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for favorite assets' - ' and supports iOS 18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports iOS. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-Favorite-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -36,7 +38,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph7_1FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph007_1FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -46,7 +48,7 @@ def Ph7_1FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezon if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -201,7 +203,7 @@ def Ph7_1FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezon return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -256,7 +258,7 @@ def Ph7_1FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezon return data_headers, data_list, source_path @artifact_processor -def Ph7_3FavoriteGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph007_3FavoriteGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -266,10 +268,10 @@ def Ph7_3FavoriteGenPlayPsql(files_found, report_folder, seeker, wrap_text, time if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph8HasAdjustment.py b/scripts/artifacts/Ph008HasAdjustment.py similarity index 94% rename from scripts/artifacts/Ph8HasAdjustment.py rename to scripts/artifacts/Ph008HasAdjustment.py index 17701b56a..c226661f1 100644 --- a/scripts/artifacts/Ph8HasAdjustment.py +++ b/scripts/artifacts/Ph008HasAdjustment.py @@ -1,29 +1,31 @@ __artifacts_v2__ = { - 'Ph8_1HasAdjustmentPhDaPsql': { - 'name': 'Ph8.1-Has Adjustment-PhDaPsql', + 'Ph008_1HasAdjustmentPhDaPsql': { + 'name': 'Ph008.1-Has Adjustment-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for adjusted assets' - ' and supports iOS 11-18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports iOS. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-Assets-Adjusted-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "edit" }, - 'Ph8_3HasAdjustmentGenPlayPsql': { - 'name': 'Ph8.3-Has Adjustment-GenPlayPsql', + 'Ph008_3HasAdjustmentGenPlayPsql': { + 'name': 'Ph008.3-Has Adjustment-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for adjusted assets' - ' and supports iOS 18. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports iOS. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-Adjusted-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -36,7 +38,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph8_1HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph008_1HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -46,7 +48,7 @@ def Ph8_1HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, ti if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -215,7 +217,7 @@ def Ph8_1HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, ti return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -353,7 +355,7 @@ def Ph8_1HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, ti return data_headers, data_list, source_path @artifact_processor -def Ph8_3HasAdjustmentGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph008_3HasAdjustmentGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -363,10 +365,10 @@ def Ph8_3HasAdjustmentGenPlayPsql(files_found, report_folder, seeker, wrap_text, if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph9BurstAvalanche.py b/scripts/artifacts/Ph009BurstAvalanche.py similarity index 91% rename from scripts/artifacts/Ph9BurstAvalanche.py rename to scripts/artifacts/Ph009BurstAvalanche.py index f6d3a0002..8a2125884 100644 --- a/scripts/artifacts/Ph9BurstAvalanche.py +++ b/scripts/artifacts/Ph009BurstAvalanche.py @@ -1,29 +1,31 @@ __artifacts_v2__ = { - 'Ph9_1BurstAvalanchePhDaPsql': { - 'name': 'Ph9.1-Burst Avalanche-PhDaPsql', + 'Ph009_1BurstAvalanchePhDaPsql': { + 'name': 'Ph009.1-Burst Avalanche-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for burst avalanche assets' - ' and supports iOS 11-17. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports iOS. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', + 'version': '6.0', + 'date': '2026-05-26', + 'reuirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-Assets-Burst-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "layers" }, - 'Ph9_3BurstAvalancheGenPlayPsql': { - 'name': 'Ph9.3-Burst Avalanche-GenPlayPsql', + 'Ph009_3BurstAvalancheGenPlayPsql': { + 'name': 'Ph009.3-Burst Avalanche-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for burst avalanche assets' - ' and supports iOS 17. The results for this script will contain' - ' one row per ZASSET table Z_PK value.', + ' and supports iOS. The results for this script will contain' + ' one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-Burst-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -36,7 +38,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph9_1BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph009_1BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -46,7 +48,7 @@ def Ph9_1BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, t if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -197,7 +199,7 @@ def Ph9_1BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, t return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -280,7 +282,7 @@ def Ph9_1BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, t return data_headers, data_list, source_path @artifact_processor -def Ph9_3BurstAvalancheGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph009_3BurstAvalancheGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -290,10 +292,10 @@ def Ph9_3BurstAvalancheGenPlayPsql(files_found, report_folder, seeker, wrap_text if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py b/scripts/artifacts/Ph011KwrdsCapsTitlesDescripsBasicAssetData.py similarity index 73% rename from scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py rename to scripts/artifacts/Ph011KwrdsCapsTitlesDescripsBasicAssetData.py index d5fb05461..867b7ee11 100644 --- a/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py +++ b/scripts/artifacts/Ph011KwrdsCapsTitlesDescripsBasicAssetData.py @@ -1,7 +1,7 @@ __artifacts_v2__ = { - 'Ph11_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql': { - 'name': 'Ph11.1-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', - 'description': 'Parses basic asset record data from iOS18 PhotoData-Photos.sqlite for assets that have' + 'Ph011_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql': { + 'name': 'Ph011.1-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', + 'description': 'Parses basic asset record data from iOS PhotoData-Photos.sqlite for assets that have' ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' @@ -9,20 +9,21 @@ ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results.', + ' search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-Assets-withDescriptions-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "info" }, - 'Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql': { - 'name': 'Ph11.3-KwrdsCapsTitlesDescripsLikesBasicAsstData-GenPlayPsql', - 'description': 'Parses basic asset record data from iOS18 GenPlay-Photos.sqlite for assets that have' + 'Ph011_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql': { + 'name': 'Ph011.3-KwrdsCapsTitlesDescripsLikesBasicAsstData-GenPlayPsql', + 'description': 'Parses basic asset record data from iOS GenPlay-Photos.sqlite for assets that have' ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' @@ -30,12 +31,13 @@ ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results.', + ' search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-withDescriptions-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -48,7 +50,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph11_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph011_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -58,7 +60,7 @@ def Ph11_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_ if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -1111,7 +1113,7 @@ def Ph11_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_ return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1393,21 +1395,585 @@ def Ph11_1KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_ return data_headers, data_list, source_path + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zKeywrd.ZSHORTCUT AS 'zKeywrd-Shortcut', + zKeywrd.ZTITLE AS 'zKeywrd-Title', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPE + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPE || '' + END AS 'zCldFeedEnt-Entry Type', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zKeywrd.Z_PK AS 'zKeywrd-zPK', + z1KeyWrds.Z_52KEYWORDS AS 'z1KeyWrds-52Keywords = zKeywrd-zPK', + zKeywrd.Z_ENT AS 'zKeywrd-zENT', + zKeywrd.Z_OPT AS 'zKeywrd-zOPT', + zKeywrd.ZUUID AS 'zKeywrd-UUID', + z1KeyWrds.Z_1ASSETATTRIBUTES AS 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES + LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_52KEYWORDS = zKeywrd.Z_PK + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Is_Recently_Saved-17', + 'zAsset-Saved Asset Type-18', + 'zAsset-Syndication State-19', + 'zAsset-Bundle Scope-20', + 'zAddAssetAttr-Share Type-21', + 'zAsset-Active Library Scope Participation State-22', + 'zAsset-Visibility State-23', + 'zAssetDes-Long Description-24', + 'zAddAssetAttr-Title-Comments via Cloud Website-25', + 'zAddAssetAttr-Accessibility Description-26', + 'zKeywrd-Shortcut-27', + 'zKeywrd-Title-28', + 'zCldSharedComment-Type-29', + 'zCldSharedComment-Comment Text-30', + ('zCldFeedEnt-Entry Date-31', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-32', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-33', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-34', + 'zCldFeedEnt-Entry Priority Number-35', + 'zCldFeedEnt-Entry Type-36', + 'zCldSharedComment-Cloud GUID-4TableStart-37', + ('zCldSharedComment-Date-38', 'datetime'), + ('zCldSharedComment-Comment Client Date-39', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-40', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-41', + 'zCldSharedComment-Batch Comment-42', + 'zCldSharedComment-Is a Caption-43', + 'zAsset-Cloud Has Comments by Me-44', + 'zCldSharedComment-Is My Comment-45', + 'zCldSharedComment-Is Deletable-46', + 'zAsset-Cloud Has Comments Conversation-47', + 'zAsset-Cloud Has Unseen Comments-48', + 'zCldSharedComment-Liked-49', + 'zAddAssetAttr-Asset Description-50', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-51', + 'zAsset-FOK-Cloud Feed Asset Entry Key-52', + 'zCldFeedEnt-zPK= zCldShared keys-53', + 'zCldFeedEnt-zENT-54', + 'zCldFeedEnt-zOPT-55', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-56', + 'zCldFeedEnt-Entry Invitation Record GUID-57', + 'zCldFeedEnt-Entry Cloud Asset GUID-58', + 'zCldSharedComment-zPK-59', + 'zCldSharedComment-zENT-60', + 'zCldSharedComment-zOPT-61', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-62', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-63', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-64', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-65', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-66', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-67', + 'zCldSharedComment-Cloud GUID-68', + 'zKeywrd-zPK-69', + 'z1KeyWrds-52Keywords = zKeywrd-zPK-70', + 'zKeywrd-zENT-71', + 'zKeywrd-zOPT-72', + 'zKeywrd-UUID-73', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-74', + 'zAsset-zPK-75', + 'zAddAssetAttr-zPK-76', + 'zAsset-UUID = store.cloudphotodb-77', + 'zAddAssetAttr-Original Stable Hash-78', + 'zAddAssetAttr.Adjusted Stable Hash-79') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + @artifact_processor -def Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph011_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) - if source_path.endswith('.sqlite'): - break + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): + logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zKeywrd.ZSHORTCUT AS 'zKeywrd-Shortcut', + zKeywrd.ZTITLE AS 'zKeywrd-Title', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPENUMBER + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || '' + END AS 'zCldFeedEnt-Entry Type Number', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zKeywrd.Z_PK AS 'zKeywrd-zPK', + z1KeyWrds.Z_47KEYWORDS AS 'z1KeyWrds-47Keywords = zKeywrd-zPK', + zKeywrd.Z_ENT AS 'zKeywrd-zENT', + zKeywrd.Z_OPT AS 'zKeywrd-zOPT', + zKeywrd.ZUUID AS 'zKeywrd-UUID', + z1KeyWrds.Z_1ASSETATTRIBUTES AS 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES + LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_47KEYWORDS = zKeywrd.Z_PK + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79])) - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) - return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Is_Recently_Saved-17', + 'zAsset-Saved Asset Type-18', + 'zAsset-Syndication State-19', + 'zAsset-Bundle Scope-20', + 'zAddAssetAttr-Share Type-21', + 'zAsset-Active Library Scope Participation State-22', + 'zAsset-Visibility State-23', + 'zAssetDes-Long Description-24', + 'zAddAssetAttr-Title-Comments via Cloud Website-25', + 'zAddAssetAttr-Accessibility Description-26', + 'zKeywrd-Shortcut-27', + 'zKeywrd-Title-28', + 'zCldSharedComment-Type-29', + 'zCldSharedComment-Comment Text-30', + ('zCldFeedEnt-Entry Date-31', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-32', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-33', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-34', + 'zCldFeedEnt-Entry Priority Number-35', + 'zCldFeedEnt-Entry Type Number-36', + 'zCldSharedComment-Cloud GUID-4TableStart-37', + ('zCldSharedComment-Date-38', 'datetime'), + ('zCldSharedComment-Comment Client Date-39', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-40', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-41', + 'zCldSharedComment-Batch Comment-42', + 'zCldSharedComment-Is a Caption-43', + 'zAsset-Cloud Has Comments by Me-44', + 'zCldSharedComment-Is My Comment-45', + 'zCldSharedComment-Is Deletable-46', + 'zAsset-Cloud Has Comments Conversation-47', + 'zAsset-Cloud Has Unseen Comments-48', + 'zCldSharedComment-Liked-49', + 'zAddAssetAttr-Asset Description-50', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-51', + 'zAsset-FOK-Cloud Feed Asset Entry Key-52', + 'zCldFeedEnt-zPK= zCldShared keys-53', + 'zCldFeedEnt-zENT-54', + 'zCldFeedEnt-zOPT-55', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-56', + 'zCldFeedEnt-Entry Invitation Record GUID-57', + 'zCldFeedEnt-Entry Cloud Asset GUID-58', + 'zCldSharedComment-zPK-59', + 'zCldSharedComment-zENT-60', + 'zCldSharedComment-zOPT-61', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-62', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-63', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-64', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-65', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-66', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-67', + 'zCldSharedComment-Cloud GUID-68', + 'zKeywrd-zPK-69', + 'z1KeyWrds-47Keywords = zKeywrd-zPK-70', + 'zKeywrd-zENT-71', + 'zKeywrd-zOPT-72', + 'zKeywrd-UUID-73', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-74', + 'zAsset-zPK-75', + 'zAddAssetAttr-zPK-76', + 'zAsset-UUID = store.cloudphotodb-77', + 'zAddAssetAttr-Original Stable Hash-78', + 'zAddAssetAttr.Adjusted Stable Hash-79') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1499,14 +2065,14 @@ def Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, repo WHEN 1 THEN '1-StillTesting' ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' END AS 'zCldFeedEnt-Entry Priority Number', - CASE zCldFeedEnt.ZENTRYTYPENUMBER + CASE zCldFeedEnt.ZENTRYTYPE WHEN 1 THEN 'Is My Shared Asset-1' WHEN 2 THEN '2-StillTesting-2' WHEN 3 THEN '3-StillTesting-3' WHEN 4 THEN 'Not My Shared Asset-4' WHEN 5 THEN 'Asset in Album with Invite Record-5' - ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || '' - END AS 'zCldFeedEnt-Entry Type Number', + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPE || '' + END AS 'zCldFeedEnt-Entry Type', zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date', DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date', @@ -1570,7 +2136,7 @@ def Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, repo zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', zKeywrd.Z_PK AS 'zKeywrd-zPK', - z1KeyWrds.Z_47KEYWORDS AS 'z1KeyWrds-47Keywords = zKeywrd-zPK', + z1KeyWrds.Z_52KEYWORDS AS 'z1KeyWrds-52Keywords = zKeywrd-zPK', zKeywrd.Z_ENT AS 'zKeywrd-zENT', zKeywrd.Z_OPT AS 'zKeywrd-zOPT', zKeywrd.ZUUID AS 'zKeywrd-UUID', @@ -1584,7 +2150,7 @@ def Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, repo LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES - LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_47KEYWORDS = zKeywrd.Z_PK + LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_52KEYWORDS = zKeywrd.Z_PK LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET @@ -1641,7 +2207,7 @@ def Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, repo 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-33', 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-34', 'zCldFeedEnt-Entry Priority Number-35', - 'zCldFeedEnt-Entry Type Number-36', + 'zCldFeedEnt-Entry Type-36', 'zCldSharedComment-Cloud GUID-4TableStart-37', ('zCldSharedComment-Date-38', 'datetime'), ('zCldSharedComment-Comment Client Date-39', 'datetime'), @@ -1675,7 +2241,7 @@ def Ph11_3KwrdsCapsTitlesDescripsLikesBasicAsstDataGenPlayPsql(files_found, repo 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-67', 'zCldSharedComment-Cloud GUID-68', 'zKeywrd-zPK-69', - 'z1KeyWrds-47Keywords = zKeywrd-zPK-70', + 'z1KeyWrds-52Keywords = zKeywrd-zPK-70', 'zKeywrd-zENT-71', 'zKeywrd-zOPT-72', 'zKeywrd-UUID-73', diff --git a/scripts/artifacts/Ph15PeopleandDetFacesNAD.py b/scripts/artifacts/Ph015PeopleandDetFacesNAD.py similarity index 99% rename from scripts/artifacts/Ph15PeopleandDetFacesNAD.py rename to scripts/artifacts/Ph015PeopleandDetFacesNAD.py index a002cea96..faf0b4d0c 100644 --- a/scripts/artifacts/Ph15PeopleandDetFacesNAD.py +++ b/scripts/artifacts/Ph015PeopleandDetFacesNAD.py @@ -1,28 +1,30 @@ __artifacts_v2__ = { - 'Ph15_1PeopleFacesNADPhDaPsql': { - 'name': 'Ph15.1-People & Faces NAD-PhDaPsql', + 'Ph015_1PeopleFacesNADPhDaPsql': { + 'name': 'Ph015.1-People & Faces NAD-PhDaPsql', 'description': 'Parses data from PhotoData-Photos.sqlite for people - detected faces - face crop data.' - ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 14-18.', + ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-G-People_Faces_Data', + 'category': 'Photos.sqlite-PeopleFaces-NAD-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "smile" }, - 'Ph15_2PeopleFacesNADSyndPL': { - 'name': 'Ph15.2-People & Faces NAD-SyndPL', + 'Ph015_2PeopleFacesNADSyndPL': { + 'name': 'Ph015.2-People & Faces NAD-SyndPL', 'description': 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' ' people - detected faces - face crop data. The results may contain multiple records' - ' per ZASSET table Z_PK value and supports iOS 14-18.', + ' per ZASSET table Z_PK value and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-PeopleFaces-NAD-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -36,7 +38,7 @@ from scripts.ilapfuncs import media_to_html, artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph15_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph015_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -46,7 +48,7 @@ def Ph15_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -2058,7 +2060,7 @@ def Ph15_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -2598,7 +2600,7 @@ def Ph15_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, return data_headers, data_list, source_path @artifact_processor -def Ph15_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph015_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -2608,7 +2610,7 @@ def Ph15_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, ti if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -4620,7 +4622,7 @@ def Ph15_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, ti return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -5159,6 +5161,5 @@ def Ph15_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, ti data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - - - + + \ No newline at end of file diff --git a/scripts/artifacts/Ph16AssetPeopleandDetFaces.py b/scripts/artifacts/Ph016AssetPeopleandDetFaces.py similarity index 99% rename from scripts/artifacts/Ph16AssetPeopleandDetFaces.py rename to scripts/artifacts/Ph016AssetPeopleandDetFaces.py index f6bf8fdc2..cc5e489c9 100644 --- a/scripts/artifacts/Ph16AssetPeopleandDetFaces.py +++ b/scripts/artifacts/Ph016AssetPeopleandDetFaces.py @@ -1,29 +1,31 @@ __artifacts_v2__ = { - 'Ph16_1PeopleFacesAssetDataPhDaPsql': { - 'name': 'Ph16.1-People & Faces Asset Data-PhDaPsql', + 'Ph016_1PeopleFacesAssetDataPhDaPsql': { + 'name': 'Ph016.1-People & Faces Asset Data-PhDaPsql', 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset' ' people and faces data. The results may contain multiple records per ZASSET table Z_PK value' - ' and supports iOS 14-18.', + ' and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-G-People_Faces_Data', + 'category': 'Photos.sqlite-Assets-PeopleFaces-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "smile" }, - 'Ph16_2PeopleFacesAssetDataSyndPL': { - 'name': 'Ph16.2-People & Faces Asset Data-SyndPL', + 'Ph016_2PeopleFacesAssetDataSyndPL': { + 'name': 'Ph016.2-People & Faces Asset Data-SyndPL', 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' ' for basic asset people and faces data. The results may contain multiple records' - ' per ZASSET table Z_PK value and supports iOS 14-18.', + ' per ZASSET table Z_PK value and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-Assets-PeopleFaces-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -37,7 +39,7 @@ from scripts.ilapfuncs import media_to_html, artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph16_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph016_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -47,7 +49,7 @@ def Ph16_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_ if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -2392,7 +2394,7 @@ def Ph16_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_ return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -3025,7 +3027,7 @@ def Ph16_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_ return data_headers, data_list, source_path @artifact_processor -def Ph16_2PeopleFacesAssetDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph016_2PeopleFacesAssetDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -3035,7 +3037,7 @@ def Ph16_2PeopleFacesAssetDataSyndPL(files_found, report_folder, seeker, wrap_te if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -5380,7 +5382,7 @@ def Ph16_2PeopleFacesAssetDataSyndPL(files_found, report_folder, seeker, wrap_te return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph17GenAIDetected.py b/scripts/artifacts/Ph017GenAIDetected.py similarity index 91% rename from scripts/artifacts/Ph17GenAIDetected.py rename to scripts/artifacts/Ph017GenAIDetected.py index daaa61cde..0bd5b78b2 100644 --- a/scripts/artifacts/Ph17GenAIDetected.py +++ b/scripts/artifacts/Ph017GenAIDetected.py @@ -1,44 +1,47 @@ __artifacts_v2__ = { - 'Ph17_1GenAIDetectedPhDaPsql': { - 'name': 'Ph17.1-Gen_AI_Detected-PhDaPsql', + 'Ph017_1GenAIDetectedPhDaPsql': { + 'name': 'Ph017.1-Gen_AI_Detected-PhDaPsql', 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets' - ' with Gen AI Type >0 and supports iOS 18. The results for this script' - ' will contain one row per ZASSET table Z_PK value.', + ' with Gen AI Type >0 and supports iOS. The results for this script' + ' will contain one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'category': 'Photos.sqlite-GenAIDetected-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "edit" }, - 'Ph17_2GenAIDetectedSyndPL': { - 'name': 'Ph17.2-Gen_AI_Detected-SyndPL', + 'Ph017_2GenAIDetectedSyndPL': { + 'name': 'Ph017.2-Gen_AI_Detected-SyndPL', 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite for assets' - ' with Gen AI Type >0 and supports iOS 18. The results for this script' - ' will contain one row per ZASSET table Z_PK value.', + ' with Gen AI Type >0 and supports iOS. The results for this script' + ' will contain one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-GenAIDetected-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "edit" }, - 'Ph17_3GenAIDetectedGenPlayPsql': { - 'name': 'Ph17.3-Gen_AI_Detected-GenPlayPsql', + 'Ph017_3GenAIDetectedGenPlayPsql': { + 'name': 'Ph017.3-Gen_AI_Detected-GenPlayPsql', 'description': 'Parses basic asset row data from GenPlay-Photos.sqlite for assets' - ' with Gen AI Type >0 and supports iOS 18. The results for this script' - ' will contain one row per ZASSET table Z_PK value.', + ' with Gen AI Type >0 and supports iOS. The results for this script' + ' will contain one row per ZASSET table Z_PK value.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-GenAIDetected-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -51,7 +54,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph17_1GenAIDetectedPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph017_1GenAIDetectedPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -61,10 +64,10 @@ def Ph17_1GenAIDetectedPhDaPsql(files_found, report_folder, seeker, wrap_text, t if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -207,7 +210,7 @@ def Ph17_1GenAIDetectedPhDaPsql(files_found, report_folder, seeker, wrap_text, t return (), [], source_path @artifact_processor -def Ph17_2GenAIDetectedSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph017_2GenAIDetectedSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -217,10 +220,10 @@ def Ph17_2GenAIDetectedSyndPL(files_found, report_folder, seeker, wrap_text, tim if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -362,7 +365,7 @@ def Ph17_2GenAIDetectedSyndPL(files_found, report_folder, seeker, wrap_text, tim return (), [], source_path @artifact_processor -def Ph17_3GenAIDetectedGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph017_3GenAIDetectedGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -372,10 +375,10 @@ def Ph17_3GenAIDetectedGenPlayPsql(files_found, report_folder, seeker, wrap_text if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph20AlbumsNAD.py b/scripts/artifacts/Ph020AlbumsNAD.py similarity index 93% rename from scripts/artifacts/Ph20AlbumsNAD.py rename to scripts/artifacts/Ph020AlbumsNAD.py index 13bb5f009..415144ccf 100644 --- a/scripts/artifacts/Ph20AlbumsNAD.py +++ b/scripts/artifacts/Ph020AlbumsNAD.py @@ -1,53 +1,56 @@ __artifacts_v2__ = { - 'Ph20_1AlbumRecordswithNADPhDaPsql': { - 'name': 'Ph20.1-Album Records NAD-PhDaPsql', + 'Ph020_1AlbumRecordswithNADPhDaPsql': { + 'name': 'Ph020.1-Album Records NAD-PhDaPsql', 'description': 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 11-18. Parses Album records only no asset data being parsed.' + ' and supports iOS. Parses Album records only no asset data being parsed.' ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' - ' Please see the album type specific scripts to view more data for each album type.', + ' Please see the album type specific scripts to view more data for each album type.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'category': 'Photos.sqlite-Albums-NAD-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "book" }, - 'Ph20_2AlbumRecordswithNADSyndPL': { - 'name': 'Ph20.2-Album Records NAD-SyndPL', + 'Ph020_2AlbumRecordswithNADSyndPL': { + 'name': 'Ph020.2-Album Records NAD-SyndPL', 'description': 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' - ' ZGENERICALBUM Table and supports iOS 11-18. Parses Album records only no asset data' + ' ZGENERICALBUM Table and supports iOS. Parses Album records only no asset data' ' being parsed. Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' - ' Please see the album type specific scripts to view more data for each album type.', + ' Please see the album type specific scripts to view more data for each album type.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-Albums-NAD-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "book" }, - 'Ph20_3AlbumRecordswithNADGenPlayPsql': { - 'name': 'Ph20.3-Album Records NAD-GenPlayPsql', + 'Ph020_3AlbumRecordswithNADGenPlayPsql': { + 'name': 'Ph020.3-Album Records NAD-GenPlayPsql', 'description': 'Parses Basic Album records found in the GenPlay-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 18. Parses Album records only no asset data being parsed.' + ' and supports iOS. Parses Album records only no asset data being parsed.' ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' - ' Please see the album type specific scripts to view more data for each album type.', + ' Please see the album type specific scripts to view more data for each album type.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Albums-NAD-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -60,7 +63,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph20_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph020_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -70,7 +73,7 @@ def Ph20_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_t if report_folder.endswith('-') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -273,7 +276,7 @@ def Ph20_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_t return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -342,7 +345,7 @@ def Ph20_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_t return data_headers, data_list, source_path @artifact_processor -def Ph20_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph020_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -352,7 +355,7 @@ def Ph20_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_tex if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): @@ -555,7 +558,7 @@ def Ph20_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_tex return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -624,7 +627,7 @@ def Ph20_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_tex return data_headers, data_list, source_path @artifact_processor -def Ph20_3AlbumRecordswithNADGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph020_3AlbumRecordswithNADGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -634,10 +637,10 @@ def Ph20_3AlbumRecordswithNADGenPlayPsql(files_found, report_folder, seeker, wra if report_folder.endswith('-') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph21AlbumsNonSharedNAD.py b/scripts/artifacts/Ph021AlbumsNonSharedNAD.py similarity index 87% rename from scripts/artifacts/Ph21AlbumsNonSharedNAD.py rename to scripts/artifacts/Ph021AlbumsNonSharedNAD.py index cee017f72..52f83ed83 100644 --- a/scripts/artifacts/Ph21AlbumsNonSharedNAD.py +++ b/scripts/artifacts/Ph021AlbumsNonSharedNAD.py @@ -1,14 +1,15 @@ __artifacts_v2__ = { - 'Ph21NonSharedAlbumRecordswithNADPhDaPsql': { - 'name': 'Ph21-Non-Shared Album Records NAD-PhDaPsql', + 'Ph021NonSharedAlbumRecordswithNADPhDaPsql': { + 'name': 'Ph021-Non-Shared Album Records NAD-PhDaPsql', 'description': 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 11-18. Parses Non-Shared Album records only, no asset data being parsed.' - ' This parser will contain parent albums and folders, and associated album data.', + ' and supports iOS. Parses Non-Shared Album records only, no asset data being parsed.' + ' This parser will contain parent albums and folders, and associated album data.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'category': 'Photos.sqlite-Albums-Only-NonShared-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -21,7 +22,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph21NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph021NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -31,7 +32,7 @@ def Ph21NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): @@ -1660,7 +1661,7 @@ def Ph21NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1919,3 +1920,263 @@ def Ph21NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State' + FROM ZGENERICALBUM zGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE zGenAlbum.ZKIND = 2 + ORDER BY zGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zGenAlbum-Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + 'ParentzGenAlbum-UUID-3', + 'ParentzGenAlbum-Cloud GUID-4', + 'ParentzGenAlbum- Title-5', + 'zGenAlbum- Title-User&System Applied-6', + 'zGenAlbum-UUID-7', + 'zGenAlbum-Cloud GUID-8', + 'zGenAlbum-Imported by Bundle Identifier-9', + ('ParentzGenAlbum-Creation Date-10', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-11', + 'ParentzGenAlbum-Pending Items Type-12', + 'ParentzGenAlbum-Kind-13', + 'ParentzGenAlbum-Cloud-Local-State-14', + 'ParentzGenAlbum-Sync Event Order Key-15', + 'ParentzGenAlbum-Pinned-16', + 'ParentzGenAlbum-Custom Sort Key-17', + 'ParentzGenAlbum-Custom Sort Ascending-18', + 'ParentzGenAlbum-Is Prototype-19', + 'ParentzGenAlbum-Project Document Type-20', + 'ParentzGenAlbum-Custom Query Type-21', + 'ParentzGenAlbum-Trashed State-22', + ('ParentzGenAlbum-Trash Date-23', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-24', + 'zGenAlbum-Pending Items Count-25', + 'zGenAlbum-Pending Items Type-26', + 'zGenAlbum- Cached Photos Count-27', + 'zGenAlbum- Cached Videos Count-28', + 'zGenAlbum- Cached Count-29', + 'zGenAlbum-Has Unseen Content-30', + 'zGenAlbum-Unseen Asset Count-31', + 'zGenAlbum-zENT- Entity-32', + 'zGenAlbum-Album Kind-33', + 'zGenAlbum-Cloud_Local_State-34', + 'zGenAlbum-Sync Event Order Key-35', + 'zGenAlbum-Pinned-36', + 'zGenAlbum-Custom Sort Key-37', + 'zGenAlbum-Custom Sort Ascending-38', + 'zGenAlbum-Is Prototype-39', + 'zGenAlbum-Project Document Type-40', + 'zGenAlbum-Custom Query Type-41', + 'zGenAlbum-Trashed State-42', + ('zGenAlbum-Trash Date-43', 'datetime'), + 'zGenAlbum-Cloud Delete State-44', + 'zGenAlbum-Search Index Rebuild State-45', + 'zGenAlbum-Duplicate Type-46', + 'zGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py b/scripts/artifacts/Ph022AssetsInNonSharedAlbums.py similarity index 86% rename from scripts/artifacts/Ph22AssetsInNonSharedAlbums.py rename to scripts/artifacts/Ph022AssetsInNonSharedAlbums.py index ed685d0a0..40f470958 100644 --- a/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py +++ b/scripts/artifacts/Ph022AssetsInNonSharedAlbums.py @@ -1,13 +1,14 @@ __artifacts_v2__ = { - 'Ph22AssetsinNonSharedAlbumsPhDaPsql': { - 'name': 'Ph22-Assets in Non-Shared Albums-PhDaPsql', + 'Ph022AssetsinNonSharedAlbumsPhDaPsql': { + 'name': 'Ph022-Assets in Non-Shared Albums-PhDaPsql', 'description': 'Parses Assets associated with Non-Shared Albums found in PhotoData-Photos.sqlite and' - ' supports iOS 11-18. Parses limited assets data with full non-shared album data.', + ' supports iOS. Parses limited assets data with full non-shared album data.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-E-Asset_In_Albums', + 'category': 'Photos.sqlite-Albums-NonSharedAssets-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -20,7 +21,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph22AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph022AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -30,7 +31,7 @@ def Ph22AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): @@ -2196,7 +2197,7 @@ def Ph22AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -2561,3 +2562,370 @@ def Ph22AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zGenAlbum.ZKIND = 2 + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr- Imported by Bundle Identifier-9', + 'zAddAssetAttr- Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Is_Recently_Saved-12', + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr-Share Type-14', + 'zAsset-Active Library Scope Participation State-15', + ('zAsset- SortToken -CameraRoll-16', 'datetime'), + ('zAsset-Added Date-17', 'datetime'), + ('zCldMast-Creation Date-18', 'datetime'), + 'zAddAssetAttr-Time Zone Name-19', + 'zAddAssetAttr-EXIF-String-20', + ('zAsset-Modification Date-21', 'datetime'), + ('zAsset-Last Shared Date-22', 'datetime'), + ('zAsset-Trashed Date-23', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Original Stable Hash-27', + 'zAddAssetAttr.Adjusted Stable Hash-28', + ('zGenAlbum-Creation Date-29', 'datetime'), + ('zGenAlbum-Start Date-30', 'datetime'), + ('zGenAlbum-End Date-31', 'datetime'), + 'ParentzGenAlbum-UUID-32', + 'ParentzGenAlbum-Cloud GUID-33', + 'ParentzGenAlbum- Title-34', + 'zGenAlbum- Title-User&System Applied-35', + 'zGenAlbum-UUID-36', + 'zGenAlbum-Cloud GUID-37', + 'zGenAlbum-Imported by Bundle Identifier-38', + ('ParentzGenAlbum-Creation Date-39', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-40', + 'ParentzGenAlbum-Pending Items Type-41', + 'ParentzGenAlbum-Kind-42', + 'ParentzGenAlbum-Cloud-Local-State-43', + 'ParentzGenAlbum-Sync Event Order Key-44', + 'ParentzGenAlbum-Pinned-45', + 'ParentzGenAlbum-Custom Sort Key-46', + 'ParentzGenAlbum-Custom Sort Ascending-47', + 'ParentzGenAlbum-Is Prototype-48', + 'ParentzGenAlbum-Project Document Type-49', + 'ParentzGenAlbum-Custom Query Type-50', + 'ParentzGenAlbum-Trashed State-51', + ('ParentzGenAlbum-Trash Date-52', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-53', + 'zGenAlbum-Pending Items Count-54', + 'zGenAlbum-Pending Items Type-55', + 'zGenAlbum- Cached Photos Count-56', + 'zGenAlbum- Cached Videos Count-57', + 'zGenAlbum- Cached Count-58', + 'zGenAlbum-Has Unseen Content-59', + 'zGenAlbum-Unseen Asset Count-60', + 'zGenAlbum-zENT- Entity-61', + 'zGenAlbum-Album Kind-62', + 'zGenAlbum-Cloud_Local_State-63', + 'zGenAlbum-Sync Event Order Key-64', + 'zGenAlbum-Pinned-65', + 'zGenAlbum-Custom Sort Key-66', + 'zGenAlbum-Custom Sort Ascending-67', + 'zGenAlbum-Is Prototype-68', + 'zGenAlbum-Project Document Type-69', + 'zGenAlbum-Custom Query Type-70', + 'zGenAlbum-Trashed State-71', + ('zGenAlbum-Trash Date-72', 'datetime'), + 'zGenAlbum-Cloud Delete State-73', + 'zGenAlbum-Search Index Rebuild State-74', + 'zGenAlbum-Duplicate Type-75', + 'zGenAlbum-Privacy State-76') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + diff --git a/scripts/artifacts/Ph23AlbumsSharedNAD.py b/scripts/artifacts/Ph023AlbumsSharedNAD.py similarity index 99% rename from scripts/artifacts/Ph23AlbumsSharedNAD.py rename to scripts/artifacts/Ph023AlbumsSharedNAD.py index 6de5038fe..046c08c14 100644 --- a/scripts/artifacts/Ph23AlbumsSharedNAD.py +++ b/scripts/artifacts/Ph023AlbumsSharedNAD.py @@ -1,14 +1,15 @@ __artifacts_v2__ = { - 'Ph23SharedAlbumRecordsInviteswithNADPhDaPsql': { - 'name': 'Ph23-Shared Album Records & Invites NAD-PhDaPsql', + 'Ph023SharedAlbumRecordsInviteswithNADPhDaPsql': { + 'name': 'Ph023-Shared Album Records & Invites NAD-PhDaPsql', 'description': 'Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 11-18. Parses Shared Album records only, no asset data being parsed.' - ' This parser will contain shared albums, share album invites, and invite status data.', + ' and supports iOS. Parses Shared Album records only, no asset data being parsed.' + ' This parser will contain shared albums, share album invites, and invite status data.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'category': 'Photos.sqlite-Albums-SharedNAD-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -21,7 +22,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph23SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph023SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -31,7 +32,7 @@ def Ph23SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, see if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("26")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): @@ -2049,7 +2050,7 @@ def Ph23SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, see return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -2361,3 +2362,4 @@ def Ph23SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, see data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + diff --git a/scripts/artifacts/Ph24AssetsInSharedAlbums.py b/scripts/artifacts/Ph024AssetsInSharedAlbums.py similarity index 99% rename from scripts/artifacts/Ph24AssetsInSharedAlbums.py rename to scripts/artifacts/Ph024AssetsInSharedAlbums.py index d4f080d1d..8d59c3840 100644 --- a/scripts/artifacts/Ph24AssetsInSharedAlbums.py +++ b/scripts/artifacts/Ph024AssetsInSharedAlbums.py @@ -1,13 +1,14 @@ __artifacts_v2__ = { - 'Ph24AssetinSharedAlbumsInvitesPhDaPsql': { - 'name': 'Ph24-Assets in Shared Albums & Invites-PhDaPsql', - 'description': 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.' - ' Parses limited asset data with full non-shared album data.', + 'Ph024AssetinSharedAlbumsInvitesPhDaPsql': { + 'name': 'Ph024-Assets in Shared Albums & Invites-PhDaPsql', + 'description': 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS.' + ' Parses limited asset data with full non-shared album data.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-E-Asset_In_Albums', + 'category': 'Photos.sqlite-Albums-SharedAssets-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -20,7 +21,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph24AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph024AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -30,7 +31,7 @@ def Ph24AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, w if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): + if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("26")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): @@ -2596,7 +2597,7 @@ def Ph24AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -3010,3 +3011,4 @@ def Ph24AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, w data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + diff --git a/scripts/artifacts/Ph25SWYConvAlbumsNAD.py b/scripts/artifacts/Ph025SWYConvAlbumsNAD.py similarity index 78% rename from scripts/artifacts/Ph25SWYConvAlbumsNAD.py rename to scripts/artifacts/Ph025SWYConvAlbumsNAD.py index 10e9a52f3..d22c3bac4 100644 --- a/scripts/artifacts/Ph25SWYConvAlbumsNAD.py +++ b/scripts/artifacts/Ph025SWYConvAlbumsNAD.py @@ -1,29 +1,31 @@ __artifacts_v2__ = { - 'Ph25_1SWYConversationRecordswithNADPhDaPsql': { - 'name': 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', + 'Ph025_1SWYConversationRecordswithNADPhDaPsql': { + 'name': 'Ph025.1-SWY Conversation Records NAD-PhDaPsql', 'description': 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' - ' ZGENERICALBUM Table and supports iOS 15-18. Parses Share with You Conversation Album' - ' records only, no asset data being parsed.', + ' ZGENERICALBUM Table and supports iOS. Parses Share with You Conversation Album' + ' records only, no asset data being parsed.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'category': 'Photos.sqlite-SWY-ChatThreadsOnly-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "message-square" }, - 'Ph25_2SWYConversationRecordswithNADSyndPL': { - 'name': 'Ph25.2-SWY Conversation Records NAD-SyndPL', + 'Ph025_2SWYConversationRecordswithNADSyndPL': { + 'name': 'Ph025.2-SWY Conversation Records NAD-SyndPL', 'description': 'Parses SWY Conversation Album Records found in the' - ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and supports iOS 15-18.' - ' Parses Share with You Conversation Album records only, no asset data being parsed.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '4.0', - 'date': '2024-12-31', + ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and supports iOS.' + ' Parses Share with You Conversation Album records only, no asset data being parsed.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-SWY-ChatThreadsOnly-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -37,7 +39,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph25_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph025_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -47,7 +49,7 @@ def Ph25_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seek if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): + if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): @@ -429,7 +431,7 @@ def Ph25_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seek return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -557,9 +559,138 @@ def Ph25_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seek data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZGENERICALBUM SWYConverszGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER + LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN Z_33ASSETS Albumsz33Assets ON Albumsz33Assets.Z_33ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE SWYConverszGenAlbum.ZKIND = 1509 + ORDER BY SWYConverszGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path @artifact_processor -def Ph25_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph025_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -569,7 +700,7 @@ def Ph25_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): + if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): @@ -951,7 +1082,7 @@ def Ph25_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1079,6 +1210,133 @@ def Ph25_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + query = ''' + SELECT + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZGENERICALBUM SWYConverszGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER + LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN Z_33ASSETS Albumsz33Assets ON Albumsz33Assets.Z_33ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE SWYConverszGenAlbum.ZKIND = 1509 + ORDER BY SWYConverszGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + return data_headers, data_list, source_path + \ No newline at end of file diff --git a/scripts/artifacts/Ph26SyndicationPLAssets.py b/scripts/artifacts/Ph026SyndicationPLAssets.py similarity index 79% rename from scripts/artifacts/Ph26SyndicationPLAssets.py rename to scripts/artifacts/Ph026SyndicationPLAssets.py index 50bb121a6..1c8189e9e 100644 --- a/scripts/artifacts/Ph26SyndicationPLAssets.py +++ b/scripts/artifacts/Ph026SyndicationPLAssets.py @@ -1,6 +1,6 @@ __artifacts_v2__ = { - 'Ph26_1SyndicationIDAssetsPhDaPsql': { - 'name': 'Ph26.1-Syndication ID Assets-PhDaPsql', + 'Ph026_1SyndicationIDAssetsPhDaPsql': { + 'name': 'Ph026.1-Syndication ID Assets-PhDaPsql', 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes' ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' ' Syndication.photoslibrary-database-Photos.sqlite' @@ -12,19 +12,20 @@ ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' ' 9-SyndPs-STILLTESTING_Sent_SWY-9' ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12', + ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', + 'category': 'Photos.sqlite-SWY-Assets-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "refresh-ccw" }, - 'Ph26_2SyndicationPLAssetsSyndPL': { - 'name': 'Ph26.2-Syndication PL Assets-SyndPL', + 'Ph026_2SyndicationPLAssetsSyndPL': { + 'name': 'Ph026.2-Syndication PL Assets-SyndPL', 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes' ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' ' Syndication.photoslibrary-database-Photos.sqlite' @@ -36,12 +37,13 @@ ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' ' 9-SyndPs-STILLTESTING_Sent_SWY-9' ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12', + ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-SWY-Assets-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -55,7 +57,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph26_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph026_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -65,7 +67,7 @@ def Ph26_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_t if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): + if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version from PhotoData-Photos.sqlite for iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): @@ -721,7 +723,7 @@ def Ph26_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_t return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -945,9 +947,234 @@ def Ph26_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_t data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Original Stable Hash-32', + 'zAddAssetAttr.Adjusted Stable Hash-33', + 'SWYConverszGenAlbum-Album Kind-34', + 'SWYConverszGenAlbum-Cloud_Local_State-35', + 'SWYConverszGenAlbum- Syndicate-36', + 'SWYConverszGenAlbum-Sync Event Order Key-37', + 'SWYConverszGenAlbum-Pinned-38', + 'SWYConverszGenAlbum-Custom Sort Key-39', + 'SWYConverszGenAlbum-Custom Sort Ascending-40', + 'SWYConverszGenAlbum-Is Prototype-41', + 'SWYConverszGenAlbum-Project Document Type-42', + 'SWYConverszGenAlbum-Custom Query Type-43', + 'SWYConverszGenAlbum-Trashed State-44', + ('SWYConverszGenAlbum-Trash Date-45', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-46', + 'SWYConverszGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path @artifact_processor -def Ph26_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph026_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -957,7 +1184,7 @@ def Ph26_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_tex if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): + if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version from Syndication.photoslibrary for iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): @@ -1613,7 +1840,7 @@ def Ph26_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_tex return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -1837,3 +2064,228 @@ def Ph26_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_tex data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Original Stable Hash-32', + 'zAddAssetAttr.Adjusted Stable Hash-33', + 'SWYConverszGenAlbum-Album Kind-34', + 'SWYConverszGenAlbum-Cloud_Local_State-35', + 'SWYConverszGenAlbum- Syndicate-36', + 'SWYConverszGenAlbum-Sync Event Order Key-37', + 'SWYConverszGenAlbum-Pinned-38', + 'SWYConverszGenAlbum-Custom Sort Key-39', + 'SWYConverszGenAlbum-Custom Sort Ascending-40', + 'SWYConverszGenAlbum-Is Prototype-41', + 'SWYConverszGenAlbum-Project Document Type-42', + 'SWYConverszGenAlbum-Custom Query Type-43', + 'SWYConverszGenAlbum-Trashed State-44', + ('SWYConverszGenAlbum-Trash Date-45', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-46', + 'SWYConverszGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph30iCloudShareMethodsNAD.py b/scripts/artifacts/Ph030iCloudShareMethodsNAD.py similarity index 78% rename from scripts/artifacts/Ph30iCloudShareMethodsNAD.py rename to scripts/artifacts/Ph030iCloudShareMethodsNAD.py index 59c5b2041..b8f1fb17e 100644 --- a/scripts/artifacts/Ph30iCloudShareMethodsNAD.py +++ b/scripts/artifacts/Ph030iCloudShareMethodsNAD.py @@ -1,16 +1,17 @@ __artifacts_v2__ = { - 'Ph30iCloudSharedMethodswithNADPhDaPsql': { - 'name': 'Ph30-iCloud Shared Methods NAD-PhDaPsql', + 'Ph030iCloudSharedMethodswithNADPhDaPsql': { + 'name': 'Ph030-iCloud Shared Methods NAD-PhDaPsql', 'description': 'Parses records for different methods which media files have been shared via iCloud Share' - ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.' + ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS.' ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' ' The iCloud Share methods being stored in these records include' - ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.', + ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'category': 'Photos.sqlite-Shared-iCloud-Methods-NAD-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -23,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph30iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph030iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -33,7 +34,7 @@ def Ph30iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, w if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")): @@ -599,7 +600,7 @@ def Ph30iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -810,3 +811,214 @@ def Ph30iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, w data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', + zShare.ZUUID AS 'zShare-UUID', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', + CASE zSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z66_SHARE || '' + END AS 'zSharePartic-z66SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count', + zShare.ZASSETCOUNT AS 'zShare-Asset Count', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count', + zShare.ZUNSEENASSETSCOUNT AS 'zShare-Unseen Assets Count', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID', + zShare.ZTITLE AS 'zShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Permission_Denied-Private-1' + WHEN 2 THEN '2-Public_Permission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-Local-and-Cloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-SPL_Not_This_User-CMM_NotCldStorageOwner-0' + WHEN 1 THEN '1-SPL_Is_This_User-CMM_IsCldStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Permissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Permission', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignore Budgets', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-Exit State', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-LastParticipant Asset Trash Notification Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-Last Participant Asset Trash Notification View Date', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT' + FROM ZSHARE zShare + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + ORDER BY zShare.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48])) + + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z66SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Asset Count-12', + 'zShare-Force Sync Attempted-13', + 'zShare-Photos Count-14', + 'zShare-Videos Count-15', + 'zShare-Unseen Assets Count-16', + 'zShare-Scope ID-17', + 'zShare-Title-SPL-18', + 'zShare-Share URL-19', + 'zShare-Local Publish State-20', + 'zShare-Public Permission-21', + 'zShare-Cloud Local State-22', + 'zShare-Scope Syncing State-23', + 'zShare-Auto Share Policy-24', + 'zSharePartic-Acceptance Status-25', + 'zSharePartic-User ID-26', + 'zSharePartic-zPK-27', + 'zSharePartic-Email Address-28', + 'zSharePartic-Phone Number-29', + 'zSharePartic-Participant ID-30', + 'zSharePartic-UUID-31', + 'zSharePartic-Is Current User-32', + 'zSharePartic-Role-33', + 'zSharePartic-Permission-34', + 'zShare-Participant Cloud Update State-35', + 'zSharePartic-Exit State-36', + 'zShare-Preview State-37', + 'zShare-Should Notify On Upload Completion-38', + 'zShare-Should Ignore Budgets-38', + 'zShare-Exit Source-40', + 'zShare-Exit State-41', + 'zShare-Exit Type-42', + 'zShare-Trashed State-43', + 'zShare-Cloud Delete State-44', + ('zShare-Trashed Date-45', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-46', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-47', 'datetime'), + 'zShare-zENT-48') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + diff --git a/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py b/scripts/artifacts/Ph031iCloudSharePhotoLibraryNAD.py similarity index 98% rename from scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py rename to scripts/artifacts/Ph031iCloudSharePhotoLibraryNAD.py index 035632fa9..8548938f0 100644 --- a/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py +++ b/scripts/artifacts/Ph031iCloudSharePhotoLibraryNAD.py @@ -1,14 +1,15 @@ __artifacts_v2__ = { - 'Ph31iCloudSPLwithParticipantswithNADPhDaPsql': { + 'Ph031iCloudSPLwithParticipantswithNADPhDaPsql': { 'name': 'Ph31-iCloud SPL with Participants NAD-PhDaPsql', 'description': 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' - ' ZSHARE Table and supports iOS 14-18. Parses iCloud SPL and Participant information' - ' records only no asset data being parsed.', + ' ZSHARE Table and supports iOS. Parses iCloud SPL and Participant information' + ' records only no asset data being parsed.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'category': 'Photos.sqlite-Shared-SPL-wParticipants-NAD-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -21,7 +22,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph31iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph031iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -31,7 +32,7 @@ def Ph31iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, see if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("26")): logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")): @@ -561,7 +562,7 @@ def Ph31iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, see return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -760,3 +761,4 @@ def Ph31iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, see data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + diff --git a/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py b/scripts/artifacts/Ph032AssetsIniCldSPLwContrib.py similarity index 98% rename from scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py rename to scripts/artifacts/Ph032AssetsIniCldSPLwContrib.py index 338c96874..ca3b85d98 100644 --- a/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py +++ b/scripts/artifacts/Ph032AssetsIniCldSPLwContrib.py @@ -1,16 +1,17 @@ __artifacts_v2__ = { - 'Ph32iCloudSPLAssetswithContributorPhDaPsql': { - 'name': 'Ph32-iCloud SPL Assets with Contributor-PhDaPsql', + 'Ph032iCloudSPLAssetswithContributorPhDaPsql': { + 'name': 'Ph032-iCloud SPL Assets with Contributor-PhDaPsql', 'description': 'Parses Assets in iCloud Shared Photo Library with contributor information from' - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-18.' + ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS.' ' Parses basic asset data and iCloud SPL and contributor information.' ' If you are attempting to match SPL count with results please check' - ' hidden, trashed, and burst assets.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '4.0', - 'date': '2024-12-31', + ' hidden, trashed, and burst assets.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'category': 'Photos.sqlite-Assets-iCloudSPL-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -23,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph32iCloudSPLAssetswithContributorPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph032iCloudSPLAssetswithContributorPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -33,7 +34,7 @@ def Ph32iCloudSPLAssetswithContributorPhDaPsql(files_found, report_folder, seeke if report_folder.endswith('-') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("15.8.2"): + if (version.parse(iosversion) <= version.parse("15.8.2")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): @@ -512,7 +513,7 @@ def Ph32iCloudSPLAssetswithContributorPhDaPsql(files_found, report_folder, seeke return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py b/scripts/artifacts/Ph033AssetsIniCldSPLfromOtherContrib.py similarity index 97% rename from scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py rename to scripts/artifacts/Ph033AssetsIniCldSPLfromOtherContrib.py index 8394f88ea..895b2088b 100644 --- a/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py +++ b/scripts/artifacts/Ph033AssetsIniCldSPLfromOtherContrib.py @@ -1,16 +1,17 @@ __artifacts_v2__ = { - 'Ph33iCldSPLAssetsfromothercontribPhDaPsql': { - 'name': 'Ph33-iCld SPL Assets from other contrib-PhDaPsql', + 'Ph033iCldSPLAssetsfromothercontribPhDaPsql': { + 'name': 'Ph033-iCld SPL Assets from other contrib-PhDaPsql', 'description': 'Parses Assets in iCloud Shared Photo Library from other contributors' - ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' + ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS.' ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' ' If you are attempting to match SPL count with results please check' - ' hidden, trashed, and burst assets.', + ' hidden, trashed, and burst assets.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'category': 'Photos.sqlite-Assets-iCloudSPL-fromOthers-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -23,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph33iCldSPLAssetsfromothercontribPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph033iCldSPLAssetsfromothercontribPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -33,7 +34,7 @@ def Ph33iCldSPLAssetsfromothercontribPhDaPsql(files_found, report_folder, seeker if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("15.8.2"): + if (version.parse(iosversion) <= version.parse("15.8.2")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): @@ -253,7 +254,7 @@ def Ph33iCldSPLAssetsfromothercontribPhDaPsql(files_found, report_folder, seeker return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph34iCloudSharedLinksNAD.py b/scripts/artifacts/Ph034iCloudSharedLinksNAD.py similarity index 98% rename from scripts/artifacts/Ph34iCloudSharedLinksNAD.py rename to scripts/artifacts/Ph034iCloudSharedLinksNAD.py index 0e45b8422..f9ee3ea51 100644 --- a/scripts/artifacts/Ph34iCloudSharedLinksNAD.py +++ b/scripts/artifacts/Ph034iCloudSharedLinksNAD.py @@ -1,13 +1,14 @@ __artifacts_v2__ = { - 'Ph34iCloudSharedLinkRecordswithNADPhDaPsql': { - 'name': 'Ph34-iCloud Shared Link Records with NAD-PhDaPsql', + 'Ph034iCloudSharedLinkRecordswithNADPhDaPsql': { + 'name': 'Ph034-iCloud Shared Link Records with NAD-PhDaPsql', 'description': 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' - ' and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed.', + ' and supports iOS. Parses iCloud Shared Link records only no asset data being parsed.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'category': 'Photos.sqlite-Shared-iCldLinks-NAD-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -20,7 +21,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph34iCloudSharedLinkRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph034iCloudSharedLinkRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -30,7 +31,7 @@ def Ph34iCloudSharedLinkRecordswithNADPhDaPsql(files_found, report_folder, seeke if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("26")): logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")): @@ -585,7 +586,7 @@ def Ph34iCloudSharedLinkRecordswithNADPhDaPsql(files_found, report_folder, seeke return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph35iCloudSharedLinkAssets.py b/scripts/artifacts/Ph035iCloudSharedLinkAssets.py similarity index 99% rename from scripts/artifacts/Ph35iCloudSharedLinkAssets.py rename to scripts/artifacts/Ph035iCloudSharedLinkAssets.py index e36e9ef6a..63ed57105 100644 --- a/scripts/artifacts/Ph35iCloudSharedLinkAssets.py +++ b/scripts/artifacts/Ph035iCloudSharedLinkAssets.py @@ -1,13 +1,14 @@ __artifacts_v2__ = { - 'Ph35iCloudSharedLinkAssetsPhDaPsql': { - 'name': 'Ph35-iCloud Shared Link Assets-PhDaPsql', + 'Ph035iCloudSharedLinkAssetsPhDaPsql': { + 'name': 'Ph035-iCloud Shared Link Assets-PhDaPsql', 'description': 'Parses iCloud Shared Link records and related assets from the' - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.', + ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'category': 'Photos.sqlite-Shared-Assets-iCldLinks-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -20,7 +21,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph35iCloudSharedLinkAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph035iCloudSharedLinkAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -30,7 +31,7 @@ def Ph35iCloudSharedLinkAssetsPhDaPsql(files_found, report_folder, seeker, wrap_ if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("26")): logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -1537,7 +1538,7 @@ def Ph35iCloudSharedLinkAssetsPhDaPsql(files_found, report_folder, seeker, wrap_ return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") diff --git a/scripts/artifacts/Ph50AssetIntResouData.py b/scripts/artifacts/Ph050AssetIntResouData.py similarity index 74% rename from scripts/artifacts/Ph50AssetIntResouData.py rename to scripts/artifacts/Ph050AssetIntResouData.py index e4a3c9b73..c2bd91117 100644 --- a/scripts/artifacts/Ph50AssetIntResouData.py +++ b/scripts/artifacts/Ph050AssetIntResouData.py @@ -1,56 +1,59 @@ __artifacts_v2__ = { - 'Ph50_1AssetIntResouPhDaPsql': { - 'name': 'Ph50.1-Asset_IntResou-PhDaPsql', - 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' + 'Ph050_1AssetIntResouPhDaPsql': { + 'name': 'Ph050.1-Asset_IntResou-PhDaPsql', + 'description': 'Parses iOS asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' ' other tables. This and other related parsers should provide data for investigative' ' analysis of assets being stored locally on the device verses assets being stored in' ' iCloud Photos as the result of optimization. This is very large query and script,' ' I recommend opening the TSV generated report with Zimmermans Tools' ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results.', + ' and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization', + 'category': 'Photos.sqlite-InternalResourceData-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph50_2AssetIntResouSyndPL': { - 'name': 'Ph50.2-Asset_IntResou-SyndPL', + 'Ph050_2AssetIntResouSyndPL': { + 'name': 'Ph050.2-Asset_IntResou-SyndPL', 'description': 'Parses iOS 14-18 asset records from Syndication.photos.library-database-Photos.sqlite' ' ZINTERNALRESOURCE and and other tables. This and other related parsers should' ' provide data for investigative analysis of assets being stored locally on the' ' device verses assets being stored in iCloud Photos as the result of optimization.' ' This is very large query and script, I recommend opening the TSV generated report' ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search, and filter the results.', + ' to view, search, and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'category': 'Photos.sqlite-InternalResourceData-SyndicationPL-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph50_3AssetIntResouGenPlayPsql': { - 'name': 'Ph50.3-Asset_IntResou-GenPlayPsql', + 'Ph050_3AssetIntResouGenPlayPsql': { + 'name': 'Ph050.3-Asset_IntResou-GenPlayPsql', 'description': 'Parses iOS 18 asset records from GenPlay-Photos.sqlite ZINTERNALRESOURCE and' ' other tables. This and other related parsers should provide data for investigative' ' analysis of assets being stored locally on the device verses assets being stored in' ' iCloud Photos as the result of optimization. This is very large query and script,' ' I recommend opening the TSV generated report with Zimmermans Tools' ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results.', + ' and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '1.0', - 'date': '2025-02-05', + 'version': '2.0', + 'date': '2026-05-27', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-InternalResourceData-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -63,27 +66,27 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for source_path in files_found: - source_path = str(source_path) - - if source_path.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) - return (), [], source_path - if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - source_path = get_file_path(files_found, "Photos.sqlite") - if source_path is None or not os.path.exists(source_path): - logfunc(f"Photos.sqlite not found for iOS version {iosversion}") - return (), [], source_path - data_list = [] +def Ph050_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - query = ''' + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): + logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -801,41 +804,41 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - ''' + ''' - db_records = get_sqlite_db_records(source_path, query) - for row in db_records: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238])) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238])) - data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-7', 'zAddAssetAttr-zPK-8', 'zAsset-UUID = store.cloudphotodb-9', @@ -1074,18 +1077,18 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t 'zMedAnlyAstAttr-zEnt-236', 'zMedAnlyAstAttr-zOpt-237', 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') - data_list = get_sqlite_db_records(source_path, query) - - return data_headers, data_list, source_path + data_list = get_sqlite_db_records(source_path, query) - elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - source_path = get_file_path(files_found, "Photos.sqlite") - if source_path is None or not os.path.exists(source_path): - logfunc(f"Photos.sqlite not found for iOS version {iosversion}") - return (), [], source_path - data_list = [] + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - query = ''' + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -1887,9 +1890,9 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t ORDER BY zAsset.ZDATECREATED ''' - db_records = get_sqlite_db_records(source_path, query) - for row in db_records: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -1922,7 +1925,7 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], row[260], row[261], row[262])) - data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-7', 'zAddAssetAttr-zPK-8', 'zAsset-UUID = store.cloudphotodb-9', @@ -2185,18 +2188,18 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t 'zMedAnlyAstAttr-zEnt-260', 'zMedAnlyAstAttr-zOpt-261', 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') - data_list = get_sqlite_db_records(source_path, query) + data_list = get_sqlite_db_records(source_path, query) - return data_headers, data_list, source_path + return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - source_path = get_file_path(files_found, "Photos.sqlite") - if source_path is None or not os.path.exists(source_path): - logfunc(f"Photos.sqlite not found for iOS version {iosversion}") - return (), [], source_path - data_list = [] + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - query = ''' + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -3032,9 +3035,9 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t ORDER BY zAsset.ZDATECREATED ''' - db_records = get_sqlite_db_records(source_path, query) - for row in db_records: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -3068,7 +3071,7 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], row[268], row[269], row[270], row[271])) - data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-7', 'zAddAssetAttr-zPK-8', 'zAsset-UUID = store.cloudphotodb-9', @@ -3340,18 +3343,18 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t 'zMedAnlyAstAttr-zEnt-269', 'zMedAnlyAstAttr-zOpt-270', 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') - data_list = get_sqlite_db_records(source_path, query) + data_list = get_sqlite_db_records(source_path, query) - return data_headers, data_list, source_path + return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - source_path = get_file_path(files_found, "Photos.sqlite") - if source_path is None or not os.path.exists(source_path): - logfunc(f"Photos.sqlite not found for iOS version {iosversion}") - return (), [], source_path - data_list = [] + elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - query = ''' + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -4193,9 +4196,9 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t ORDER BY zAsset.ZDATECREATED ''' - db_records = get_sqlite_db_records(source_path, query) - for row in db_records: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -4229,7 +4232,7 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], row[268], row[269], row[270], row[271], row[272], row[273], row[274])) - data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-1', 'zAddAssetAttr-zPK-2', 'zAsset-UUID = store.cloudphotodb-3', @@ -4504,18 +4507,18 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t 'zMedAnlyAstAttr-zEnt-272', 'zMedAnlyAstAttr-zOpt-273', 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') - data_list = get_sqlite_db_records(source_path, query) + data_list = get_sqlite_db_records(source_path, query) - return data_headers, data_list, source_path + return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): - source_path = get_file_path(files_found, "Photos.sqlite") - if source_path is None or not os.path.exists(source_path): - logfunc(f"Photos.sqlite not found for iOS version {iosversion}") - return (), [], source_path - data_list = [] + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - query = ''' + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -5422,9 +5425,9 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t ORDER BY zAsset.ZDATECREATED ''' - db_records = get_sqlite_db_records(source_path, query) - for row in db_records: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -5462,7 +5465,7 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], row[300], row[301], row[302])) - data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-1', 'zAddAssetAttr-zPK-2', 'zAsset-UUID = store.cloudphotodb-3', @@ -5765,39 +5768,28 @@ def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, t 'zMedAnlyAstAttr-zEnt-301', 'zMedAnlyAstAttr-zOpt-302', 'zMedAnlyAstAttr-Asset= zAsset-Zpk-303') - data_list = get_sqlite_db_records(source_path, query) - - return data_headers, data_list, source_path - -@artifact_processor -def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): - for source_path in files_found: - source_path = str(source_path) - - if source_path.endswith('.sqlite'): - break + data_list = get_sqlite_db_records(source_path, query) - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for SyndicationPL-Photos.sqlite from iOS " + iosversion) - return (), [], source_path - if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - source_path = get_file_path(files_found, "Photos.sqlite") - if source_path is None or not os.path.exists(source_path): - logfunc(f"Photos.sqlite not found for iOS version {iosversion}") - return (), [], source_path - data_list = [] + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - query = ''' + query = ''' SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart- datetime', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash', CASE zIntResou.ZLOCALAVAILABILITY WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' @@ -5813,7 +5805,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 0 THEN '0-Photo-0' WHEN 1 THEN '1-Video-1' WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustement-Data-5' + WHEN 5 THEN '5-Adjustment-Data-5' WHEN 6 THEN '6-Screenshot-6' WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' WHEN 13 THEN '13-Movie-13' @@ -5875,6 +5867,23 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim CASE zAsset.ZCOMPLETE WHEN 1 THEN '1-Yes-1' END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', CASE zAsset.ZCLOUDISMYASSET WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' @@ -5903,7 +5912,16 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-Flash Fired-1' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' END AS 'zExtAttr-Flash Fired', - zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 1 THEN '1-GenPlayground_or_3rdPrty_GenAI-1' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' @@ -5914,6 +5932,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', CASE zAddAssetAttr.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -5946,10 +5965,15 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 12 THEN '12-SWY_Syndication_PL-12' ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' END AS 'zCldMast-Imported By', - zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr-Creator Bundle ID', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -5967,17 +5991,33 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date- datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll- datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created- datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date- datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created- datetime', zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date- datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date- datetime', CASE zCldMast.ZCLOUDLOCALSTATE WHEN 0 THEN '0-Not Synced with Cloud-0' WHEN 1 THEN '1-Pending Upload-1' @@ -5985,13 +6025,13 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 3 THEN '3-Synced with Cloud-3' ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date- datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime', zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date- datetime', zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date- datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date- datetime', zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', @@ -6009,7 +6049,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN -1.0 THEN '-1.0' ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' WHEN 1 THEN '1-Shifted Location Valid-1' @@ -6017,7 +6057,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zAddAssetAttr-Shifted Location Valid', CASE WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' END AS 'zAddAssetAttr-Shifted Location Data', CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID WHEN 0 THEN '0-Reverse Location Not Valid-0' @@ -6054,6 +6094,23 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' ELSE 'CMzCldMastMedData-Data_Empty-NULL' END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', CASE zAsset.ZORIENTATION WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' WHEN 2 THEN '2-Horizontal-Camera-(right)-2' @@ -6080,9 +6137,14 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 0 THEN '0-Photo-0' WHEN 1 THEN '1-Video-1' END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZKINDSUBTYPE WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Paorama-1' + WHEN 1 THEN '1-Panorama-1' WHEN 2 THEN '2-Live-Photo-2' WHEN 10 THEN '10-SpringBoard-Screenshot-10' WHEN 100 THEN '100-Video-100' @@ -6117,6 +6179,11 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 2 THEN '2-StillTesting_Playback_Variation-2' ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr-View_Presentation', zAsset.ZDURATION AS 'zAsset-Video Duration', zExtAttr.ZDURATION AS 'zExtAttr-Duration', zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', @@ -6130,20 +6197,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' WHEN 3 THEN '3-SWY_Syndication_Asset-3' ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' - END AS 'zIntResou-Datastore Class ID', - CASE zAsset.ZCLOUDPLACEHOLDERKIND - WHEN 0 THEN '0-Local&CloudMaster Asset-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' - WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' - WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' - WHEN 6 THEN '6-StillTesting-6' - WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' - WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' - WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' - END AS 'zAsset-Cloud Placeholder Kind', + END AS 'zIntResou-Datastore Class ID', CASE zIntResou.ZLOCALAVAILABILITY WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' @@ -6156,7 +6210,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zIntResou-Local Availability Target', CASE zIntResou.ZCLOUDLOCALSTATE WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' - WHEN 1 THEN '1-IR_Asset_Pening-Upload-1' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' @@ -6171,7 +6225,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-StillTesting-1' ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' END AS 'zIntResou-Remote Availability Target', - zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', zIntResou.ZFILEID AS 'zIntResou- File ID', CASE zIntResou.ZVERSION @@ -6186,7 +6239,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 0 THEN '0-Photo-0' WHEN 1 THEN '1-Video-1' WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustement-Data-5' + WHEN 5 THEN '5-Adjustment-Data-5' WHEN 6 THEN '6-Screenshot-6' WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' WHEN 13 THEN '13-Movie-13' @@ -6281,19 +6334,48 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim CASE zIntResou.ZCLOUDLASTPREFETCHDATE WHEN 0 THEN '0-NA-0' ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') - END AS 'zIntResou-Cloud Last Prefetch Date', + END AS 'zIntResou-Cloud Last Prefetch Date- datetime', zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', - DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', - zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', - zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', - zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date- datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', CASE zCldMast.ZFULLSIZEJPEGSOURCE WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' END AS 'zCldMast-Full Size JPEG Source', zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', @@ -6302,6 +6384,11 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' END AS 'zAsset-Depth_Type', zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', CASE zAsset.ZAVALANCHEPICKTYPE WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' @@ -6329,16 +6416,23 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zAddAssetAttr-Cloud Recovery State', zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', - zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', - CASE zAsset.ZHASADJUSTMENTS + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp- datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime', zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', CASE zAsset.ZFAVORITE WHEN 0 THEN '0-Asset Not Favorite-0' WHEN 1 THEN '1-Asset Favorite-1' @@ -6353,13 +6447,20 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date- datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', CASE zIntResou.ZTRASHEDSTATE WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' END AS 'zIntResou-Trash State', - DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date- datetime', CASE zAsset.ZCLOUDDELETESTATE WHEN 0 THEN '0-Cloud Asset Not Deleted-0' WHEN 1 THEN '1-Cloud Asset Deleted-1' @@ -6381,8 +6482,8 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' END AS 'zIntResou-PTP Trashed State', zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp- datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date- datetime', zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', @@ -6395,17 +6496,55 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' END AS 'zAddAssetAttr-Allowed for Analysis', zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp- datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE WHEN 0 THEN '0-No Copy-0' WHEN 1 THEN '1-Has A Copy-1' WHEN 2 THEN '2-Has A Copy-2' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', zExtAttr.ZISO AS 'zExtAttr-ISO', zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', @@ -6416,12 +6555,16 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', zAsset.ZHEIGHT AS 'zAsset-Height', zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', - zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', zAsset.ZWIDTH AS 'zAsset-Width', zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', - zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', @@ -6433,11 +6576,16 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE WHEN 0 THEN '0-JPEG Original Resource-0' WHEN 1 THEN '1-RAW Original Resource-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', @@ -6450,15 +6598,22 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' END AS 'zAddAssetAttr-Share Type', - zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', zAsset.Z_ENT AS 'zAsset-zENT', zAsset.Z_OPT AS 'zAsset-zOPT', zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', @@ -6470,8 +6625,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', - zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', - zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', zCldMast.Z_ENT AS 'zCldMast-zENT', zCldMast.Z_OPT AS 'zCldMast-zOPT', @@ -6486,6 +6640,13 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', zExtAttr.Z_ENT AS 'zExtAttr-zENT', zExtAttr.Z_OPT AS 'zExtAttr-zOPT', @@ -6507,285 +6668,371 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES ORDER BY zAsset.ZDATECREATED ''' - db_records = get_sqlite_db_records(source_path, query) - for row in db_records: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238])) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300])) - data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Cloud is My Asset-12', - 'zAsset-Cloud is deletable-Asset-13', - 'zAsset-Cloud_Local_State-14', - 'zAsset-Visibility State-15', - 'zExtAttr-Camera Make-16', - 'zExtAttr-Camera Model-17', - 'zExtAttr-Lens Model-18', - 'zExtAttr-Flash Fired-19', - 'zExtAttr-Focal Lenght-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr-Creator Bundle ID-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - ('zAsset-Added Date-34', 'datetime'), - ('zAsset- SortToken -CameraRoll-35', 'datetime'), - ('zAsset-Date Created-36', 'datetime'), - ('zCldMast-Creation Date-37', 'datetime'), - ('zIntResou-CldMst Date Created-38', 'datetime'), - 'zAddAssetAttr-Time Zone Name-39', - 'zAddAssetAttr-Time Zone Offset-40', - 'zAddAssetAttr-Inferred Time Zone Offset-41', - 'zAddAssetAttr-EXIF-String-42', - ('zAsset-Modification Date-43', 'datetime'), - ('zAsset-Last Shared Date-44', 'datetime'), - 'zCldMast-Cloud Local State-45', - ('zCldMast-Import Date-46', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), - 'zAddAssetAttr-Import Session ID-48', - ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-50', - ('zAsset-Cloud Batch Publish Date-51', 'datetime'), - ('zAsset-Cloud Server Publish Date-52', 'datetime'), - 'zAsset-Cloud Download Requests-53', - 'zAsset-Cloud Batch ID-54', - 'zAddAssetAttr-Upload Attempts-55', - 'zAsset-Latitude-56', - 'zExtAttr-Latitude-57', - 'zAsset-Longitude-58', - 'zExtAttr-Longitude-59', - 'zAddAssetAttr-GPS Horizontal Accuracy-60', - 'zAddAssetAttr-Location Hash-61', - 'zAddAssetAttr-Shifted Location Valid-62', - 'zAddAssetAttr-Shifted Location Data-63', - 'zAddAssetAttr-Reverse Location Is Valid-64', - 'zAddAssetAttr-Reverse Location Data-65', - 'AAAzCldMastMedData-zOPT-66', - 'zAddAssetAttr-Media Metadata Type-67', - 'AAAzCldMastMedData-Data-68', - 'CldMasterzCldMastMedData-zOPT-69', - 'zCldMast-Media Metadata Type-70', - 'CMzCldMastMedData-Data-71', - 'zAsset-Orientation-72', - 'zAddAssetAttr-Original Orientation-73', - 'zAsset-Kind-74', - 'zAsset-Kind-Sub-Type-75', - 'zAddAssetAttr-Cloud Kind Sub Type-76', - 'zAsset-Playback Style-77', - 'zAsset-Playback Variation-78', - 'zAsset-Video Duration-79', - 'zExtAttr-Duration-80', - 'zAsset-Video CP Duration-81', - 'zAddAssetAttr-Video CP Duration Time Scale-82', - 'zAsset-Video CP Visibility State-83', - 'zAddAssetAttr-Video CP Display Value-84', - 'zAddAssetAttr-Video CP Display Time Scale-85', - 'zIntResou-Datastore Class ID-86', - 'zAsset-Cloud Placeholder Kind-87', - 'zIntResou-Local Availability-88', - 'zIntResou-Local Availability Target-89', - 'zIntResou-Cloud Local State-90', - 'zIntResou-Remote Availability-91', - 'zIntResou-Remote Availability Target-92', - 'zIntResou-Transient Cloud Master-93', - 'zIntResou-Side Car Index-94', - 'zIntResou- File ID-95', - 'zIntResou-Version-96', - 'zAddAssetAttr- Original-File-Size-97', - 'zIntResou-Resource Type-98', - 'zIntResou-Datastore Sub-Type-99', - 'zIntResou-Cloud Source Type-100', - 'zIntResou-Data Length-101', - 'zIntResou-Recipe ID-102', - ('zIntResou-Cloud Last Prefetch Date-103', 'datetime'), - 'zIntResou-Cloud Prefetch Count-104', - ('zIntResou- Cloud-Last-OnDemand Download-Date-105', 'datetime'), - 'zAsset-Uniform Type ID-106', - 'zAsset-Original Color Space-107', - 'zCldMast-Uniform_Type_ID-108', - 'zCldMast-Full Size JPEG Source-109', - 'zAsset-HDR Gain-110', - 'zExtAttr-Codec-111', - 'zCldMast-Codec Name-112', - 'zCldMast-Video Frame Rate-113', - 'zCldMast-Placeholder State-114', - 'zAsset-Depth_Type-115', - 'zAsset-Avalanche UUID-116', - 'zAsset-Avalanche_Pick_Type-BurstAsset-117', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118', - 'zAddAssetAttr-Cloud Recovery State-119', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-120', - 'zAsset-Deferred Processing Needed-121', - 'zAddAssetAttr-Deferred Photo Identifier-122', - 'zAddAssetAttr-Deferred Processing Candidate Options-123', - 'zAsset-Has Adjustments-Camera-Effects-Filters-124', - ('zAsset-Adjustment Timestamp-125', 'datetime'), - 'zAddAssetAttr-Editor Bundle ID-126', - 'zAddAssetAttr-Montage-127', - 'zAsset-Favorite-128', - 'zAsset-Hidden-129', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130', - ('zAsset-Trashed Date-131', 'datetime'), - 'zIntResou-Trash State-132', - ('zIntResou-Trashed Date-133', 'datetime'), - 'zAsset-Cloud Delete State-134', - 'zIntResou-Cloud Delete State-135', - 'zAddAssetAttr-PTP Trashed State-136', - 'zIntResou-PTP Trashed State-137', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-138', - ('zMedAnlyAstAttr-Media Analysis Timestamp-139', 'datetime'), - ('zAsset-Analysis State Modification Date-140', 'datetime'), - 'zAddAssetAttr- Pending View Count-141', - 'zAddAssetAttr- View Count-142', - 'zAddAssetAttr- Pending Play Count-143', - 'zAddAssetAttr- Play Count-144', - 'zAddAssetAttr- Pending Share Count-145', - 'zAddAssetAttr- Share Count-146', - 'zAddAssetAttr-Allowed for Analysis-147', - 'zAddAssetAttr-Scene Analysis Version-148', - ('zAddAssetAttr-Scene Analysis Timestamp-149', 'datetime'), - 'zAddAssetAttr-Destination Asset Copy State-150', - 'zAddAssetAttr-Variation Suggestions States-151', - 'zAsset-High Frame Rate State-152', - 'zAsset-Video Key Frame Time Scale-153', - 'zAsset-Video Key Frame Value-154', - 'zExtAttr-ISO-155', - 'zExtAttr-Metering Mode-156', - 'zExtAttr-Sample Rate-157', - 'zExtAttr-Track Format-158', - 'zExtAttr-White Balance-159', - 'zExtAttr-Aperture-160', - 'zExtAttr-BitRate-161', - 'zExtAttr-Exposure Bias-162', - 'zExtAttr-Frames Per Second-163', - 'zExtAttr-Shutter Speed-164', - 'zAsset-Height-165', - 'zAddAssetAttr-Original Height-166', - 'zIntResou-Unoriented Height-167', - 'zAsset-Width-168', - 'zAddAssetAttr-Original Width-169', - 'zIntResou-Unoriented Width-170', - 'zAsset-Thumbnail Index-171', - 'zAddAssetAttr-Embedded Thumbnail Height-172', - 'zAddAssetAttr-Embedded Thumbnail Length-173', - 'zAddAssetAttr-Embedded Thumbnail Offset-174', - 'zAddAssetAttr-Embedded Thumbnail Width-175', - 'zAsset-Packed Acceptable Crop Rect-176', - 'zAsset-Packed Badge Attributes-177', - 'zAsset-Packed Preferred Crop Rect-178', - 'zAsset-Curation Score-179', - 'zAsset-Camera Processing Adjustment State-180', - 'zAsset-Depth Type-181', - 'zAddAssetAttr-Orig Resource Choice-182', - 'zAddAssetAttr-Spatial Over Capture Group ID-183', - 'zAddAssetAttr-Place Annotation Data-184', - 'zAddAssetAttr-Distance Identity-HEX-185', - 'zAddAssetAttr-Edited IPTC Attributes-186', - 'zAddAssetAttr-Title-Comments via Cloud Website-187', - 'zAddAssetAttr-Accessibility Description-188', - 'zAddAssetAttr-Photo Stream Tag ID-189', - 'zAddAssetAttr-Share Type-190', - 'zAsset-Overall Aesthetic Score-191', - 'zAsset-zENT-192', - 'zAsset-zOPT-193', - 'zAsset-Master= zCldMast-zPK-194', - 'zAsset-Extended Attributes= zExtAttr-zPK-195', - 'zAsset-Import Session Key-196', - 'zAsset-FOK-Cloud Feed Asset Entry Key-197', - 'zAsset-Computed Attributes Asset Key-198', - 'zAsset-Promotion Score-199', - 'zAsset-Media Analysis Attributes Key-200', - 'zAsset-Media Group UUID-201', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202', - 'zAsset.Cloud Collection GUID-203', - 'zAddAssetAttr-zENT-204', - 'ZAddAssetAttr-zOPT-205', - 'zAddAssetAttr-zAsset= zAsset_zPK-206', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208', - 'zAddAssetAttr-Public Global UUID-209', - 'zAddAssetAttr-Original Assets UUID-210', - 'zAddAssetAttr-Originating Asset Identifier-211', - 'zAddAssetAttr.Adjusted Fingerprint-212', - 'zCldMast-zPK= zAsset-Master-213', - 'zCldMast-zENT-214', - 'zCldMast-zOPT-215', - 'zCldMast-Moment Share Key= zShare-zPK-216', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218', - 'zCldMast-Originating Asset ID-219', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220', - 'CMzCldMastMedData-zENT-221', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-222', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223', - 'AAAzCldMastMedData-zENT-224', - 'AAAzCldMastMedData-CldMast key-225', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-227', - 'zExtAttr-zENT-228', - 'zExtAttr-zOPT-229', - 'zExtAttr-Asset Key-230', - 'zIntResou-zPK-231', - 'zIntResou-zENT-232', - 'zIntResou-zOPT-233', - 'zIntResou-Asset= zAsset_zPK-234', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235', - 'zMedAnlyAstAttr-zEnt-236', - 'zMedAnlyAstAttr-zOpt-237', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') - data_list = get_sqlite_db_records(source_path, query) + data_headers = (('zAsset-Date Created-4QueryStart- datetime-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-4', + 'zIntResou-Fingerprint-5', + 'zAddAssetAttr.Adjusted Stable Hash-6', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-7', + 'zIntResou-Stable Hash-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-28', + 'zExtAttr-Credit-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date- datetime-48', 'datetime'), + ('zAsset- SortToken -CameraRoll- datetime-49', 'datetime'), + 'zAddAssetAttr-Date Created Source-50', + ('zAsset-Date Created- datetime-51', 'datetime'), + ('zCldMast-Creation Date- datetime-52', 'datetime'), + ('zIntResou-CldMst Date Created- datetime-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date- datetime-58', 'datetime'), + ('zAsset-Last Shared Date- datetime-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date- datetime-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date- datetime-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date- datetime-66', 'datetime'), + ('zAsset-Cloud Server Publish Date- datetime-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zIntResou-Local Availability-108', + 'zIntResou-Local Availability Target-109', + 'zIntResou-Cloud Local State-110', + 'zIntResou-Remote Availability-111', + 'zIntResou-Remote Availability Target-112', + 'zIntResou-Side Car Index-113', + 'zIntResou- File ID-114', + 'zIntResou-Version-115', + 'zAddAssetAttr- Original-File-Size-116', + 'zIntResou-Resource Type-117', + 'zIntResou-Datastore Sub-Type-118', + 'zIntResou-Cloud Source Type-119', + 'zIntResou-Data Length-120', + 'zIntResou-Recipe ID-121', + ('zIntResou-Cloud Last Prefetch Date- datetime-122', 'datetime'), + 'zIntResou-Cloud Prefetch Count-123', + ('zIntResou- Cloud-Last-OnDemand Download-Date- datetime-124', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-125', + 'zIntResou-Compact-UTI-126', + 'zAsset-Uniform Type ID-127', + 'zAsset-Original Color Space-128', + 'zCldMast-Uniform_Type_ID-129', + 'zCldMast-Full Size JPEG Source-130', + 'zAsset-HDR Gain-131', + 'zAsset-zHDR_Type-132', + 'zExtAttr-Codec-133', + 'zIntResou-Codec Four Char Code Name-134', + 'zCldMast-Codec Name-135', + 'zCldMast-Video Frame Rate-136', + 'zCldMast-Placeholder State-137', + 'zAsset-Depth_Type-138', + 'zAsset-Avalanche UUID-139', + 'zAsset-Avalanche_Kind-140', + 'zAsset-Avalanche_Pick_Type-BurstAsset-141', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-142', + 'zAddAssetAttr-Cloud Recovery State-143', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-144', + 'zAsset-Deferred Processing Needed-145', + 'zAsset-Video Deferred Processing Needed-146', + 'zAddAssetAttr-Deferred Photo Identifier-147', + 'zAddAssetAttr-Deferred Processing Candidate Options-148', + 'zAsset-Adjustments_State-149', + ('zAsset-Adjustment Timestamp- datetime-150', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime-151', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-152', + 'zAddAssetAttr-Montage-153', + 'zCompSyncAttr-Local_Analysis_Major_Version-154', + 'zAsset-Favorite-155', + 'zAsset-Hidden-156', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-157', + ('zAsset-Trashed Date- datetime-158', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-159', + 'zAsset-Delete-Reason-160', + 'zIntResou-Trash State-161', + ('zIntResou-Trashed Date- datetime-162', 'datetime'), + 'zAsset-Cloud Delete State-163', + 'zIntResou-Cloud Delete State-164', + 'zAddAssetAttr-PTP Trashed State-165', + 'zIntResou-PTP Trashed State-166', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-167', + ('zMedAnlyAstAttr-Media Analysis Timestamp- datetime-168', 'datetime'), + ('zAsset-Analysis State Modification Date- datetime-169', 'datetime'), + 'zAddAssetAttr- Pending View Count-170', + 'zAddAssetAttr- View Count-171', + 'zAddAssetAttr- Pending Play Count-172', + 'zAddAssetAttr- Play Count-173', + 'zAddAssetAttr- Pending Share Count-174', + 'zAddAssetAttr- Share Count-175', + 'zAddAssetAttr-Allowed for Analysis-176', + 'zAddAssetAttr-Scene Analysis Version-177', + 'zAddAssetAttr-Scene Analysis is From Preview-178', + ('zAddAssetAttr-Scene Analysis Timestamp- datetime-179', 'datetime'), + 'zAsset-Duplication Asset Visibility State-180', + 'zAddAssetAttr-Destination Asset Copy State-181', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-182', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-183', + 'zCldMast-Source Master For Duplication Scope ID-184', + 'zAddAssetAttr-Source Asset For Duplication ID-185', + 'zCldMast-Source Master for Duplication ID-186', + 'zAddAssetAttr-Variation Suggestions States-187', + 'zAsset-High Frame Rate State-188', + 'zAsset-Video Key Frame Time Scale-189', + 'zAsset-Video Key Frame Value-190', + 'zAsset-Current_Sleet_Cast-191', + 'zAddAssetAttr.Sleet_Is_Reversible-192', + 'zExtAttr-Sleet_Rendering_Version-193', + 'zExtAttr-Sleet_Intensity-194', + 'zExtAttr-Sleet_Tone_Bias-195', + 'zExtAttr-Sleet_Color_Bias-196', + 'zExtAttr-Sleet_Cast-197', + 'zExtAttr-ISO-198', + 'zExtAttr-Metering Mode-199', + 'zExtAttr-Sample Rate-200', + 'zExtAttr-Track Format-201', + 'zExtAttr-White Balance-202', + 'zExtAttr-Aperture-203', + 'zExtAttr-BitRate-204', + 'zExtAttr-Exposure Bias-205', + 'zExtAttr-Frames Per Second-206', + 'zExtAttr-Shutter Speed-207', + 'zExtAttr-Slush Scene Bias-208', + 'zExtAttr-Slush Version-209', + 'zExtAttr-Slush Preset-210', + 'zExtAttr-Slush Warm Bias-211', + 'zAsset-Height-212', + 'zAddAssetAttr-Original Height-213', + 'zIntResou-UnOriented Height-214', + 'zAsset-Width-215', + 'zAddAssetAttr-Original Width-216', + 'zIntResou-UnOriented Width-217', + 'zAsset-Thumbnail Index-218', + 'zAddAssetAttr-Embedded Thumbnail Height-219', + 'zAddAssetAttr-Embedded Thumbnail Length-220', + 'zAddAssetAttr-Embedded Thumbnail Offset-221', + 'zAddAssetAttr-Embedded Thumbnail Width-222', + 'zAsset-Packed Acceptable Crop Rect-223', + 'zAsset-Packed Badge Attributes-224', + 'zAsset-Packed Preferred Crop Rect-225', + 'zAsset-Curation Score-226', + 'zAsset-Camera Processing Adjustment State-227', + 'zAsset-Depth Type-228', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-229', + 'zAddAssetAttr-Orig Resource Choice-230', + 'zAsset-Spatial Type-231', + 'zAddAssetAttr-Spatial Over Capture Group ID-232', + 'zAddAssetAttr-Place Annotation Data-233', + 'zAddAssetAttr-Distance Identity-HEX-234', + 'zAddAssetAttr-Edited IPTC Attributes-235', + 'zAddAssetAttr-Title-Comments via Cloud Website-236', + 'zAddAssetAttr-Accessibility Description-237', + 'zAddAssetAttr-Photo Stream Tag ID-238', + 'zAddAssetAttr-Share Type-239', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-240', + 'zAsset-Overall Aesthetic Score-241', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-242', + 'zMedAnlyAstAttr-Image_Caption_Version-243', + 'zMedAnlyAstAttr-Video_Caption_Version-244', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-245', + 'zAsset-zENT-246', + 'zAsset-zOPT-247', + 'zAsset-Master= zCldMast-zPK-248', + 'zAsset-Extended Attributes= zExtAttr-zPK-249', + 'zAsset-Import Session Key-250', + 'zAsset-Photo Analysis Attributes Key-251', + 'zAsset-FOK-Cloud Feed Asset Entry Key-252', + 'zAsset-Computed Attributes Asset Key-253', + 'zAsset-Promotion Score-254', + 'zAsset-Iconic Score-255', + 'zAsset-Media Analysis Attributes Key-256', + 'zAsset-Media Group UUID-257', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-258', + 'zAsset.Cloud Collection GUID-259', + 'zAddAssetAttr-zENT-260', + 'ZAddAssetAttr-zOPT-261', + 'zAddAssetAttr-zAsset= zAsset_zPK-262', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-263', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-264', + 'zAddAssetAttr-Public Global UUID-265', + 'zAddAssetAttr-Original Assets UUID-266', + 'zAddAssetAttr-Originating Asset Identifier-267', + 'zCldMast-zPK= zAsset-Master-268', + 'zCldMast-zENT-269', + 'zCldMast-zOPT-270', + 'zCldMast-Moment Share Key= zShare-zPK-271', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-272', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-273', + 'zCldMast-Originating Asset ID-274', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-275', + 'CMzCldMastMedData-zENT-276', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-277', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-278', + 'AAAzCldMastMedData-zENT-279', + 'AAAzCldMastMedData-CldMast key-280', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-281', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-282', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-283', + 'zCompSyncAttr-zAsset= zAsset-zPK-284', + 'zCompSyncAttr-zENT-285', + 'zCompSyncAttr-zOPT-286', + 'zCompSyncAttr-Local_Analysis_Stage-287', + 'zCompSyncAttr-Cloud_Compute_State_Version-288', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-289', + 'zExtAttr-zENT-290', + 'zExtAttr-zOPT-291', + 'zExtAttr-Asset Key-292', + 'zIntResou-zPK-293', + 'zIntResou-zENT-294', + 'zIntResou-zOPT-295', + 'zIntResou-Asset= zAsset_zPK-296', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-297', + 'zMedAnlyAstAttr-zEnt-298', + 'zMedAnlyAstAttr-zOpt-299', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-300') - return data_headers, data_list, source_path + data_list = get_sqlite_db_records(source_path, query) - elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): + return data_headers, data_list, source_path + +@artifact_processor +def Ph050_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): + logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): source_path = get_file_path(files_found, "Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -6877,23 +7124,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim CASE zAsset.ZCOMPLETE WHEN 1 THEN '1-Yes-1' END AS 'zAsset Complete', - CASE zAsset.ZBUNDLESCOPE - WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' - WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' - WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' - WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' - END AS 'zAsset-Bundle Scope', - CASE zAsset.ZSYNDICATIONSTATE - WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' - WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' - WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' - WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' - WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' - END AS 'zAsset-Syndication State', CASE zAsset.ZCLOUDISMYASSET WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' @@ -6922,9 +7152,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-Flash Fired-1' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' END AS 'zExtAttr-Flash Fired', - zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', - zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', - zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' @@ -6967,7 +7195,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 12 THEN '12-SWY_Syndication_PL-12' ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' END AS 'zCldMast-Imported By', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr-Creator Bundle ID', zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', @@ -6988,15 +7216,8 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', @@ -7037,7 +7258,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN -1.0 THEN '-1.0' ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' WHEN 1 THEN '1-Shifted Location Valid-1' @@ -7082,19 +7303,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' ELSE 'CMzCldMastMedData-Data_Empty-NULL' END AS 'CMzCldMastMedData-Data', - zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', - zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', - CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE - WHEN 0 THEN '0-NA-0' - WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' - WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' - WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' - WHEN 16 THEN '16-STILLTESTING-16' - WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' - WHEN 2048 THEN '2048-STILLTESTING-2048' - WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' - ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' - END AS 'zMedAnlyAstAttr-Syndication Processing Value', CASE zAsset.ZORIENTATION WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' WHEN 2 THEN '2-Horizontal-Camera-(right)-2' @@ -7123,7 +7331,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zAsset-Kind', CASE zAsset.ZKINDSUBTYPE WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' + WHEN 1 THEN '1-Paorama-1' WHEN 2 THEN '2-Live-Photo-2' WHEN 10 THEN '10-SpringBoard-Screenshot-10' WHEN 100 THEN '100-Video-100' @@ -7197,7 +7405,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zIntResou-Local Availability Target', CASE zIntResou.ZCLOUDLOCALSTATE WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' - WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 1 THEN '1-IR_Asset_Pening-Upload-1' WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' @@ -7227,7 +7435,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 0 THEN '0-Photo-0' WHEN 1 THEN '1-Video-1' WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 5 THEN '5-Adjustement-Data-5' WHEN 6 THEN '6-Screenshot-6' WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' WHEN 13 THEN '13-Movie-13' @@ -7325,25 +7533,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zIntResou-Cloud Last Prefetch Date', zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', - CASE zIntResou.ZUTICONFORMANCEHINT - WHEN 0 THEN '0-NA-Doesnt_Conform-0' - WHEN 1 THEN '1-UTTypeImage-1' - WHEN 2 THEN '2-UTTypeProRawPhoto-2' - WHEN 3 THEN '3-UTTypeMovie-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' - END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', - CASE zIntResou.ZCOMPACTUTI - WHEN 1 THEN '1-JPEG-THM-1' - WHEN 3 THEN '3-HEIC-3' - WHEN 6 THEN '6-PNG-6' - WHEN 7 THEN '7-StillTesting' - WHEN 9 THEN '9-DNG-9' - WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' - WHEN 24 THEN '24-MPEG4-24' - WHEN 36 THEN '36-Wallpaper-36' - WHEN 37 THEN '37-Adj-Mutation_Data-37' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' - END AS 'zIntResou-Compact-UTI', zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', @@ -7353,17 +7542,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' END AS 'zCldMast-Full Size JPEG Source', zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', - CASE zAsset.ZHDRTYPE - WHEN 0 THEN '0-No-HDR-0' - WHEN 3 THEN '3-HDR_Photo-3_RT' - WHEN 4 THEN '4-Non-HDR_Version-4_RT' - WHEN 5 THEN '5-HEVC_Movie-5' - WHEN 6 THEN '6-Panorama-6_RT' - WHEN 10 THEN '10-HDR-Gain-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' - END AS 'zAsset-zHDR_Type', zExtAttr.ZCODEC AS 'zExtAttr-Codec', - zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', @@ -7399,7 +7578,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zAddAssetAttr-Cloud Recovery State', zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', - zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', CASE zAsset.ZHASADJUSTMENTS @@ -7453,7 +7631,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zIntResou-PTP Trashed State', zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', @@ -7466,10 +7644,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' END AS 'zAddAssetAttr-Allowed for Analysis', zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', - CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW - WHEN 0 THEN '0-No-0' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' - END AS 'zAddAssetAttr-Scene Analysis is From Preview', DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE WHEN 0 THEN '0-No Copy-0' @@ -7477,10 +7651,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 2 THEN '2-Has A Copy-2' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' END AS 'zAddAssetAttr-Destination Asset Copy State', - zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', - zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', - zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', - zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', @@ -7495,16 +7665,12 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', - zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', - zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', - zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', - zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', zAsset.ZHEIGHT AS 'zAsset-Height', zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', - zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height', zAsset.ZWIDTH AS 'zAsset-Width', zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', - zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width', zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', @@ -7516,7 +7682,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', - zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV_file', CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE WHEN 0 THEN '0-JPEG Original Resource-0' WHEN 1 THEN '1-RAW Original Resource-1' @@ -7624,10 +7789,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262])) + row[236], row[237], row[238])) data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-7', @@ -7641,262 +7803,238 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim 'zIntResou-Datastore Sub-Type-4QueryStart-4', 'zIntResou-Recipe ID-4QueryStart-5', 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Lenght-22', - 'zExtAttr-Focal Lenth in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - ('zAsset-Added Date-39', 'datetime'), - ('zAsset- SortToken -CameraRoll-40', 'datetime'), - ('zAddAssetAttr-Date Created Source-41', 'datetime'), - ('zAsset-Date Created-42', 'datetime'), - ('zCldMast-Creation Date-43', 'datetime'), - ('zIntResou-CldMst Date Created-44', 'datetime'), - 'zAddAssetAttr-Time Zone Name-45', - 'zAddAssetAttr-Time Zone Offset-46', - 'zAddAssetAttr-Inferred Time Zone Offset-47', - 'zAddAssetAttr-EXIF-String-48', - ('zAsset-Modification Date-49', 'datetime'), - ('zAsset-Last Shared Date-50', 'datetime'), - 'zCldMast-Cloud Local State-51', - ('zCldMast-Import Date-52', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'), - 'zAddAssetAttr-Import Session ID-54', - ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-56', - ('zAsset-Cloud Batch Publish Date-57', 'datetime'), - ('zAsset-Cloud Server Publish Date-58', 'datetime'), - 'zAsset-Cloud Download Requests-59', - 'zAsset-Cloud Batch ID-60', - 'zAddAssetAttr-Upload Attempts-61', - 'zAsset-Latitude-62', - 'zExtAttr-Latitude-63', - 'zAsset-Longitude-64', - 'zExtAttr-Longitude-65', - 'zAddAssetAttr-GPS Horizontal Accuracy-66', - 'zAddAssetAttr-Location Hash-67', - 'zAddAssetAttr-Shifted Location Valid-68', - 'zAddAssetAttr-Shifted Location Data-69', - 'zAddAssetAttr-Reverse Location Is Valid-70', - 'zAddAssetAttr-Reverse Location Data-71', - 'AAAzCldMastMedData-zOPT-72', - 'zAddAssetAttr-Media Metadata Type-73', - 'AAAzCldMastMedData-Data-74', - 'CldMasterzCldMastMedData-zOPT-75', - 'zCldMast-Media Metadata Type-76', - 'CMzCldMastMedData-Data-77', - 'zAddAssetAttr-Syndication History-78', - 'zMedAnlyAstAttr-Syndication Processing Version-79', - 'zMedAnlyAstAttr-Syndication Processing Value-80', - 'zAsset-Orientation-81', - 'zAddAssetAttr-Original Orientation-82', - 'zAsset-Kind-83', - 'zAsset-Kind-Sub-Type-84', - 'zAddAssetAttr-Cloud Kind Sub Type-85', - 'zAsset-Playback Style-86', - 'zAsset-Playback Variation-87', - 'zAsset-Video Duration-88', - 'zExtAttr-Duration-89', - 'zAsset-Video CP Duration-90', - 'zAddAssetAttr-Video CP Duration Time Scale-91', - 'zAsset-Video CP Visibility State-92', - 'zAddAssetAttr-Video CP Display Value-93', - 'zAddAssetAttr-Video CP Display Time Scale-94', - 'zIntResou-Datastore Class ID-95', - 'zAsset-Cloud Placeholder Kind-96', - 'zIntResou-Local Availability-97', - 'zIntResou-Local Availability Target-98', - 'zIntResou-Cloud Local State-99', - 'zIntResou-Remote Availability-100', - 'zIntResou-Remote Availability Target-101', - 'zIntResou-Transient Cloud Master-102', - 'zIntResou-Side Car Index-103', - 'zIntResou- File ID-104', - 'zIntResou-Version-105', - 'zAddAssetAttr- Original-File-Size-106', - 'zIntResou-Resource Type-107', - 'zIntResou-Datastore Sub-Type-108', - 'zIntResou-Cloud Source Type-109', - 'zIntResou-Data Length-110', - 'zIntResou-Recipe ID-111', - ('zIntResou-Cloud Last Prefetch Date-112', 'datetime'), - 'zIntResou-Cloud Prefetch Count-113', - ('zIntResou- Cloud-Last-OnDemand Download-Date-114', 'datetime'), - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115', - 'zIntResou-Compact-UTI-116', - 'zAsset-Uniform Type ID-117', - 'zAsset-Original Color Space-118', - 'zCldMast-Uniform_Type_ID-119', - 'zCldMast-Full Size JPEG Source-120', - 'zAsset-HDR Gain-121', - 'zAsset-zHDR_Type-122', - 'zExtAttr-Codec-123', - 'zIntResou-Codec Four Char Code Name-124', - 'zCldMast-Codec Name-125', - 'zCldMast-Video Frame Rate-126', - 'zCldMast-Placeholder State-127', - 'zAsset-Depth_Type-128', - 'zAsset-Avalanche UUID-129', - 'zAsset-Avalanche_Pick_Type-BurstAsset-130', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131', - 'zAddAssetAttr-Cloud Recovery State-132', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-133', - 'zAsset-Deferred Processing Needed-134', - 'zAsset-Video Deferred Processing Needed-135', - 'zAddAssetAttr-Deferred Photo Identifier-136', - 'zAddAssetAttr-Deferred Processing Candidate Options-137', - 'zAsset-Has Adjustments-Camera-Effects-Filters-138', - ('zAsset-Adjustment Timestamp-139', 'datetime'), - 'zAddAssetAttr-Editor Bundle ID-140', - 'zAddAssetAttr-Montage-141', - 'zAsset-Favorite-142', - 'zAsset-Hidden-143', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144', - ('zAsset-Trashed Date-145', 'datetime'), - 'zIntResou-Trash State-146', - ('zIntResou-Trashed Date-147', 'datetime'), - 'zAsset-Cloud Delete State-148', - 'zIntResou-Cloud Delete State-149', - 'zAddAssetAttr-PTP Trashed State-150', - 'zIntResou-PTP Trashed State-151', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-152', - ('zMedAnlyAstAttr-Media Analysis Timestamp-153', 'datetime'), - ('zAsset-Analysis State Modification Date-154', 'datetime'), - 'zAddAssetAttr- Pending View Count-155', - 'zAddAssetAttr- View Count-156', - 'zAddAssetAttr- Pending Play Count-157', - 'zAddAssetAttr- Play Count-158', - 'zAddAssetAttr- Pending Share Count-159', - 'zAddAssetAttr- Share Count-160', - 'zAddAssetAttr-Allowed for Analysis-161', - 'zAddAssetAttr-Scene Analysis Version-162', - 'zAddAssetAttr-Scene Analysis is From Preview-163', - ('zAddAssetAttr-Scene Analysis Timestamp-164', 'datetime'), - 'zAddAssetAttr-Destination Asset Copy State-165', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-166', - 'zCldMast-Source Master For Duplication Scope ID-167', - 'zAddAssetAttr-Source Asset For Duplication ID-168', - 'zCldMast-Source Master for Duplication ID-169', - 'zAddAssetAttr-Variation Suggestions States-170', - 'zAsset-High Frame Rate State-171', - 'zAsset-Video Key Frame Time Scale-172', - 'zAsset-Video Key Frame Value-173', - 'zExtAttr-ISO-174', - 'zExtAttr-Metering Mode-175', - 'zExtAttr-Sample Rate-176', - 'zExtAttr-Track Format-177', - 'zExtAttr-White Balance-178', - 'zExtAttr-Aperture-179', - 'zExtAttr-BitRate-180', - 'zExtAttr-Exposure Bias-181', - 'zExtAttr-Frames Per Second-182', - 'zExtAttr-Shutter Speed-183', - 'zExtAttr-Slush Scene Bias-184', - 'zExtAttr-Slush Version-185', - 'zExtAttr-Slush Preset-186', - 'zExtAttr-Slush Warm Bias-187', - 'zAsset-Height-188', - 'zAddAssetAttr-Original Height-189', - 'zIntResou-Unoriented Height-190', - 'zAsset-Width-191', - 'zAddAssetAttr-Original Width-192', - 'zIntResou-Unoriented Width-193', - 'zAsset-Thumbnail Index-194', - 'zAddAssetAttr-Embedded Thumbnail Height-195', - 'zAddAssetAttr-Embedded Thumbnail Length-196', - 'zAddAssetAttr-Embedded Thumbnail Offset-197', - 'zAddAssetAttr-Embedded Thumbnail Width-198', - 'zAsset-Packed Acceptable Crop Rect-199', - 'zAsset-Packed Badge Attributes-200', - 'zAsset-Packed Preferred Crop Rect-201', - 'zAsset-Curation Score-202', - 'zAsset-Camera Processing Adjustment State-203', - 'zAsset-Depth Type-204', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205', - 'zAddAssetAttr-Orig Resource Choice-206', - 'zAddAssetAttr-Spatial Over Capture Group ID-207', - 'zAddAssetAttr-Place Annotation Data-208', - 'zAddAssetAttr-Distance Identity-HEX-209', - 'zAddAssetAttr-Edited IPTC Attributes-210', - 'zAddAssetAttr-Title-Comments via Cloud Website-211', - 'zAddAssetAttr-Accessibility Description-212', - 'zAddAssetAttr-Photo Stream Tag ID-213', - 'zAddAssetAttr-Share Type-214', - 'zAsset-Overall Aesthetic Score-215', - 'zAsset-zENT-216', - 'zAsset-zOPT-217', - 'zAsset-Master= zCldMast-zPK-218', - 'zAsset-Extended Attributes= zExtAttr-zPK-219', - 'zAsset-Import Session Key-220', - 'zAsset-FOK-Cloud Feed Asset Entry Key-221', - 'zAsset-Computed Attributes Asset Key-222', - 'zAsset-Promotion Score-223', - 'zAsset-Media Analysis Attributes Key-224', - 'zAsset-Media Group UUID-225', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226', - 'zAsset.Cloud Collection GUID-227', - 'zAddAssetAttr-zENT-228', - 'ZAddAssetAttr-zOPT-229', - 'zAddAssetAttr-zAsset= zAsset_zPK-230', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232', - 'zAddAssetAttr-Public Global UUID-233', - 'zAddAssetAttr-Original Assets UUID-234', - 'zAddAssetAttr-Originating Asset Identifier-235', - 'zAddAssetAttr.Adjusted Fingerprint-236', - 'zCldMast-zPK= zAsset-Master-237', - 'zCldMast-zENT-238', - 'zCldMast-zOPT-239', - 'zCldMast-Moment Share Key= zShare-zPK-240', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242', - 'zCldMast-Originating Asset ID-243', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244', - 'CMzCldMastMedData-zENT-245', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-246', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247', - 'AAAzCldMastMedData-zENT-248', - 'AAAzCldMastMedData-CldMast key-249', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-251', - 'zExtAttr-zENT-252', - 'zExtAttr-zOPT-253', - 'zExtAttr-Asset Key-254', - 'zIntResou-zPK-255', - 'zIntResou-zENT-256', - 'zIntResou-zOPT-257', - 'zIntResou-Asset= zAsset_zPK-258', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259', - 'zMedAnlyAstAttr-zEnt-260', - 'zMedAnlyAstAttr-zOpt-261', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') + 'zAsset-Cloud is My Asset-12', + 'zAsset-Cloud is deletable-Asset-13', + 'zAsset-Cloud_Local_State-14', + 'zAsset-Visibility State-15', + 'zExtAttr-Camera Make-16', + 'zExtAttr-Camera Model-17', + 'zExtAttr-Lens Model-18', + 'zExtAttr-Flash Fired-19', + 'zExtAttr-Focal Lenght-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr-Creator Bundle ID-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + ('zAsset-Added Date-34', 'datetime'), + ('zAsset- SortToken -CameraRoll-35', 'datetime'), + ('zAsset-Date Created-36', 'datetime'), + ('zCldMast-Creation Date-37', 'datetime'), + ('zIntResou-CldMst Date Created-38', 'datetime'), + 'zAddAssetAttr-Time Zone Name-39', + 'zAddAssetAttr-Time Zone Offset-40', + 'zAddAssetAttr-Inferred Time Zone Offset-41', + 'zAddAssetAttr-EXIF-String-42', + ('zAsset-Modification Date-43', 'datetime'), + ('zAsset-Last Shared Date-44', 'datetime'), + 'zCldMast-Cloud Local State-45', + ('zCldMast-Import Date-46', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), + 'zAddAssetAttr-Import Session ID-48', + ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-50', + ('zAsset-Cloud Batch Publish Date-51', 'datetime'), + ('zAsset-Cloud Server Publish Date-52', 'datetime'), + 'zAsset-Cloud Download Requests-53', + 'zAsset-Cloud Batch ID-54', + 'zAddAssetAttr-Upload Attempts-55', + 'zAsset-Latitude-56', + 'zExtAttr-Latitude-57', + 'zAsset-Longitude-58', + 'zExtAttr-Longitude-59', + 'zAddAssetAttr-GPS Horizontal Accuracy-60', + 'zAddAssetAttr-Location Hash-61', + 'zAddAssetAttr-Shifted Location Valid-62', + 'zAddAssetAttr-Shifted Location Data-63', + 'zAddAssetAttr-Reverse Location Is Valid-64', + 'zAddAssetAttr-Reverse Location Data-65', + 'AAAzCldMastMedData-zOPT-66', + 'zAddAssetAttr-Media Metadata Type-67', + 'AAAzCldMastMedData-Data-68', + 'CldMasterzCldMastMedData-zOPT-69', + 'zCldMast-Media Metadata Type-70', + 'CMzCldMastMedData-Data-71', + 'zAsset-Orientation-72', + 'zAddAssetAttr-Original Orientation-73', + 'zAsset-Kind-74', + 'zAsset-Kind-Sub-Type-75', + 'zAddAssetAttr-Cloud Kind Sub Type-76', + 'zAsset-Playback Style-77', + 'zAsset-Playback Variation-78', + 'zAsset-Video Duration-79', + 'zExtAttr-Duration-80', + 'zAsset-Video CP Duration-81', + 'zAddAssetAttr-Video CP Duration Time Scale-82', + 'zAsset-Video CP Visibility State-83', + 'zAddAssetAttr-Video CP Display Value-84', + 'zAddAssetAttr-Video CP Display Time Scale-85', + 'zIntResou-Datastore Class ID-86', + 'zAsset-Cloud Placeholder Kind-87', + 'zIntResou-Local Availability-88', + 'zIntResou-Local Availability Target-89', + 'zIntResou-Cloud Local State-90', + 'zIntResou-Remote Availability-91', + 'zIntResou-Remote Availability Target-92', + 'zIntResou-Transient Cloud Master-93', + 'zIntResou-Side Car Index-94', + 'zIntResou- File ID-95', + 'zIntResou-Version-96', + 'zAddAssetAttr- Original-File-Size-97', + 'zIntResou-Resource Type-98', + 'zIntResou-Datastore Sub-Type-99', + 'zIntResou-Cloud Source Type-100', + 'zIntResou-Data Length-101', + 'zIntResou-Recipe ID-102', + ('zIntResou-Cloud Last Prefetch Date-103', 'datetime'), + 'zIntResou-Cloud Prefetch Count-104', + ('zIntResou- Cloud-Last-OnDemand Download-Date-105', 'datetime'), + 'zAsset-Uniform Type ID-106', + 'zAsset-Original Color Space-107', + 'zCldMast-Uniform_Type_ID-108', + 'zCldMast-Full Size JPEG Source-109', + 'zAsset-HDR Gain-110', + 'zExtAttr-Codec-111', + 'zCldMast-Codec Name-112', + 'zCldMast-Video Frame Rate-113', + 'zCldMast-Placeholder State-114', + 'zAsset-Depth_Type-115', + 'zAsset-Avalanche UUID-116', + 'zAsset-Avalanche_Pick_Type-BurstAsset-117', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118', + 'zAddAssetAttr-Cloud Recovery State-119', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-120', + 'zAsset-Deferred Processing Needed-121', + 'zAddAssetAttr-Deferred Photo Identifier-122', + 'zAddAssetAttr-Deferred Processing Candidate Options-123', + 'zAsset-Has Adjustments-Camera-Effects-Filters-124', + ('zAsset-Adjustment Timestamp-125', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-126', + 'zAddAssetAttr-Montage-127', + 'zAsset-Favorite-128', + 'zAsset-Hidden-129', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130', + ('zAsset-Trashed Date-131', 'datetime'), + 'zIntResou-Trash State-132', + ('zIntResou-Trashed Date-133', 'datetime'), + 'zAsset-Cloud Delete State-134', + 'zIntResou-Cloud Delete State-135', + 'zAddAssetAttr-PTP Trashed State-136', + 'zIntResou-PTP Trashed State-137', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-138', + ('zMedAnlyAstAttr-Media Analysis Timestamp-139', 'datetime'), + ('zAsset-Analysis State Modification Date-140', 'datetime'), + 'zAddAssetAttr- Pending View Count-141', + 'zAddAssetAttr- View Count-142', + 'zAddAssetAttr- Pending Play Count-143', + 'zAddAssetAttr- Play Count-144', + 'zAddAssetAttr- Pending Share Count-145', + 'zAddAssetAttr- Share Count-146', + 'zAddAssetAttr-Allowed for Analysis-147', + 'zAddAssetAttr-Scene Analysis Version-148', + ('zAddAssetAttr-Scene Analysis Timestamp-149', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-150', + 'zAddAssetAttr-Variation Suggestions States-151', + 'zAsset-High Frame Rate State-152', + 'zAsset-Video Key Frame Time Scale-153', + 'zAsset-Video Key Frame Value-154', + 'zExtAttr-ISO-155', + 'zExtAttr-Metering Mode-156', + 'zExtAttr-Sample Rate-157', + 'zExtAttr-Track Format-158', + 'zExtAttr-White Balance-159', + 'zExtAttr-Aperture-160', + 'zExtAttr-BitRate-161', + 'zExtAttr-Exposure Bias-162', + 'zExtAttr-Frames Per Second-163', + 'zExtAttr-Shutter Speed-164', + 'zAsset-Height-165', + 'zAddAssetAttr-Original Height-166', + 'zIntResou-Unoriented Height-167', + 'zAsset-Width-168', + 'zAddAssetAttr-Original Width-169', + 'zIntResou-Unoriented Width-170', + 'zAsset-Thumbnail Index-171', + 'zAddAssetAttr-Embedded Thumbnail Height-172', + 'zAddAssetAttr-Embedded Thumbnail Length-173', + 'zAddAssetAttr-Embedded Thumbnail Offset-174', + 'zAddAssetAttr-Embedded Thumbnail Width-175', + 'zAsset-Packed Acceptable Crop Rect-176', + 'zAsset-Packed Badge Attributes-177', + 'zAsset-Packed Preferred Crop Rect-178', + 'zAsset-Curation Score-179', + 'zAsset-Camera Processing Adjustment State-180', + 'zAsset-Depth Type-181', + 'zAddAssetAttr-Orig Resource Choice-182', + 'zAddAssetAttr-Spatial Over Capture Group ID-183', + 'zAddAssetAttr-Place Annotation Data-184', + 'zAddAssetAttr-Distance Identity-HEX-185', + 'zAddAssetAttr-Edited IPTC Attributes-186', + 'zAddAssetAttr-Title-Comments via Cloud Website-187', + 'zAddAssetAttr-Accessibility Description-188', + 'zAddAssetAttr-Photo Stream Tag ID-189', + 'zAddAssetAttr-Share Type-190', + 'zAsset-Overall Aesthetic Score-191', + 'zAsset-zENT-192', + 'zAsset-zOPT-193', + 'zAsset-Master= zCldMast-zPK-194', + 'zAsset-Extended Attributes= zExtAttr-zPK-195', + 'zAsset-Import Session Key-196', + 'zAsset-FOK-Cloud Feed Asset Entry Key-197', + 'zAsset-Computed Attributes Asset Key-198', + 'zAsset-Promotion Score-199', + 'zAsset-Media Analysis Attributes Key-200', + 'zAsset-Media Group UUID-201', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202', + 'zAsset.Cloud Collection GUID-203', + 'zAddAssetAttr-zENT-204', + 'ZAddAssetAttr-zOPT-205', + 'zAddAssetAttr-zAsset= zAsset_zPK-206', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208', + 'zAddAssetAttr-Public Global UUID-209', + 'zAddAssetAttr-Original Assets UUID-210', + 'zAddAssetAttr-Originating Asset Identifier-211', + 'zAddAssetAttr.Adjusted Fingerprint-212', + 'zCldMast-zPK= zAsset-Master-213', + 'zCldMast-zENT-214', + 'zCldMast-zOPT-215', + 'zCldMast-Moment Share Key= zShare-zPK-216', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218', + 'zCldMast-Originating Asset ID-219', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220', + 'CMzCldMastMedData-zENT-221', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-222', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223', + 'AAAzCldMastMedData-zENT-224', + 'AAAzCldMastMedData-CldMast key-225', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-227', + 'zExtAttr-zENT-228', + 'zExtAttr-zOPT-229', + 'zExtAttr-Asset Key-230', + 'zIntResou-zPK-231', + 'zIntResou-zENT-232', + 'zIntResou-zOPT-233', + 'zIntResou-Asset= zAsset_zPK-234', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235', + 'zMedAnlyAstAttr-zEnt-236', + 'zMedAnlyAstAttr-zOpt-237', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): + elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): source_path = get_file_path(files_found, "Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -7926,7 +8064,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 0 THEN '0-Photo-0' WHEN 1 THEN '1-Video-1' WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 5 THEN '5-Adjustement-Data-5' WHEN 6 THEN '6-Screenshot-6' WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' WHEN 13 THEN '13-Movie-13' @@ -8100,15 +8238,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE - WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' - WHEN 1 THEN '1-Asset-In-Active-SPL-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' - END AS 'zAsset-Active Library Scope Participation State', - CASE zAsset.ZLIBRARYSCOPESHARESTATE - WHEN 0 THEN '0-Asset-Not-In-SPL-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' - END AS 'zAsset-Library Scope Share State- StillTesting', DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', CASE zAddAssetAttr.ZDATECREATEDSOURCE @@ -8157,7 +8286,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN -1.0 THEN '-1.0' ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' WHEN 1 THEN '1-Shifted Location Valid-1' @@ -8165,7 +8294,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zAddAssetAttr-Shifted Location Valid', CASE WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' END AS 'zAddAssetAttr-Shifted Location Data', CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID WHEN 0 THEN '0-Reverse Location Not Valid-0' @@ -8202,10 +8331,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' ELSE 'CMzCldMastMedData-Data_Empty-NULL' END AS 'CMzCldMastMedData-Data', - CASE zAsset.ZSEARCHINDEXREBUILDSTATE - WHEN 0 THEN '0-StillTesting-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' - END AS 'zAsset-Search Index Rebuild State', zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE @@ -8549,13 +8674,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', - CASE zAsset.ZDELETEREASON - WHEN 1 THEN '1-StillTesting Delete-Reason-1' - WHEN 2 THEN '2-StillTesting Delete-Reason-2' - WHEN 3 THEN '3-StillTesting Delete-Reason-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' - END AS 'zAsset-Delete-Reason', CASE zIntResou.ZTRASHEDSTATE WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' @@ -8584,7 +8702,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zIntResou-PTP Trashed State', zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', @@ -8602,24 +8720,12 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' END AS 'zAddAssetAttr-Scene Analysis is From Preview', DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE - WHEN 0 THEN '0-No-Duplicates-0' - WHEN 1 THEN '1-Has Duplicate-1' - WHEN 2 THEN '2-Is a Duplicate-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' - END AS 'zAsset-Duplication Asset Visibility State', CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE WHEN 0 THEN '0-No Copy-0' WHEN 1 THEN '1-Has A Copy-1' WHEN 2 THEN '2-Has A Copy-2' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' END AS 'zAddAssetAttr-Destination Asset Copy State', - CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE - WHEN 0 THEN '0-Unknown-StillTesting-0' - WHEN 1 THEN '1-Unknown-StillTesting-1' - WHEN 2 THEN '2-Unknown-StillTesting-2' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' - END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', @@ -8677,14 +8783,12 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' END AS 'zAddAssetAttr-Share Type', - zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', zAsset.Z_ENT AS 'zAsset-zENT', zAsset.Z_OPT AS 'zAsset-zOPT', zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', - zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', @@ -8772,8 +8876,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271])) + row[260], row[261], row[262])) data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), 'zAsset-zPK-7', @@ -8814,244 +8917,235 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim 'zAddAssetAttr- Original Filename-36', 'zCldMast- Original Filename-37', 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Active Library Scope Participation State-39', - 'zAsset-Library Scope Share State- StillTesting-40', - ('zAsset-Added Date-41', 'datetime'), - ('zAsset- SortToken -CameraRoll-42', 'datetime'), - ('zAddAssetAttr-Date Created Source-43', 'datetime'), - ('zAsset-Date Created-44', 'datetime'), - ('zCldMast-Creation Date-45', 'datetime'), - ('zIntResou-CldMst Date Created-46', 'datetime'), - 'zAddAssetAttr-Time Zone Name-47', - 'zAddAssetAttr-Time Zone Offset-48', - 'zAddAssetAttr-Inferred Time Zone Offset-49', - 'zAddAssetAttr-EXIF-String-50', - ('zAsset-Modification Date-51', 'datetime'), - ('zAsset-Last Shared Date-52', 'datetime'), - 'zCldMast-Cloud Local State-53', - ('zCldMast-Import Date-54', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'), - 'zAddAssetAttr-Import Session ID-56', - ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-58', - ('zAsset-Cloud Batch Publish Date-59', 'datetime'), - ('zAsset-Cloud Server Publish Date-60', 'datetime'), - 'zAsset-Cloud Download Requests-61', - 'zAsset-Cloud Batch ID-62', - 'zAddAssetAttr-Upload Attempts-63', - 'zAsset-Latitude-64', - 'zExtAttr-Latitude-65', - 'zAsset-Longitude-66', - 'zExtAttr-Longitude-67', - 'zAddAssetAttr-GPS Horizontal Accuracy-68', - 'zAddAssetAttr-Location Hash-69', - 'zAddAssetAttr-Shifted Location Valid-70', - 'zAddAssetAttr-Shifted Location Data-71', - 'zAddAssetAttr-Reverse Location Is Valid-72', - 'zAddAssetAttr-Reverse Location Data-73', - 'AAAzCldMastMedData-zOPT-74', - 'zAddAssetAttr-Media Metadata Type-75', - 'AAAzCldMastMedData-Data-76', - 'CldMasterzCldMastMedData-zOPT-77', - 'zCldMast-Media Metadata Type-78', - 'CMzCldMastMedData-Data-79', - 'zAsset-Search Index Rebuild State-80', - 'zAddAssetAttr-Syndication History-81', - 'zMedAnlyAstAttr-Syndication Processing Version-82', - 'zMedAnlyAstAttr-Syndication Processing Value-83', - 'zAsset-Orientation-84', - 'zAddAssetAttr-Original Orientation-85', - 'zAsset-Kind-86', - 'zAsset-Kind-Sub-Type-87', - 'zAddAssetAttr-Cloud Kind Sub Type-88', - 'zAsset-Playback Style-89', - 'zAsset-Playback Variation-90', - 'zAsset-Video Duration-91', - 'zExtAttr-Duration-92', - 'zAsset-Video CP Duration-93', - 'zAddAssetAttr-Video CP Duration Time Scale-94', - 'zAsset-Video CP Visibility State-95', - 'zAddAssetAttr-Video CP Display Value-96', - 'zAddAssetAttr-Video CP Display Time Scale-97', - 'zIntResou-Datastore Class ID-98', - 'zAsset-Cloud Placeholder Kind-99', - 'zIntResou-Local Availability-100', - 'zIntResou-Local Availability Target-101', - 'zIntResou-Cloud Local State-102', - 'zIntResou-Remote Availability-103', - 'zIntResou-Remote Availability Target-104', - 'zIntResou-Transient Cloud Master-105', - 'zIntResou-Side Car Index-106', - 'zIntResou- File ID-107', - 'zIntResou-Version-108', - 'zAddAssetAttr- Original-File-Size-109', - 'zIntResou-Resource Type-110', - 'zIntResou-Datastore Sub-Type-111', - 'zIntResou-Cloud Source Type-112', - 'zIntResou-Data Length-113', - 'zIntResou-Recipe ID-114', - ('zIntResou-Cloud Last Prefetch Date-115', 'datetime'), - 'zIntResou-Cloud Prefetch Count-116', - ('zIntResou- Cloud-Last-OnDemand Download-Date-117', 'datetime'), - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118', - 'zIntResou-Compact-UTI-119', - 'zAsset-Uniform Type ID-120', - 'zAsset-Original Color Space-121', - 'zCldMast-Uniform_Type_ID-122', - 'zCldMast-Full Size JPEG Source-123', - 'zAsset-HDR Gain-124', - 'zAsset-zHDR_Type-125', - 'zExtAttr-Codec-126', - 'zIntResou-Codec Four Char Code Name-127', - 'zCldMast-Codec Name-128', - 'zCldMast-Video Frame Rate-129', - 'zCldMast-Placeholder State-130', - 'zAsset-Depth_Type-131', - 'zAsset-Avalanche UUID-132', - 'zAsset-Avalanche_Pick_Type-BurstAsset-133', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud Recovery State-135', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', - 'zAsset-Deferred Processing Needed-137', - 'zAsset-Video Deferred Processing Needed-138', - 'zAddAssetAttr-Deferred Photo Identifier-139', - 'zAddAssetAttr-Deferred Processing Candidate Options-140', - 'zAsset-Has Adjustments-Camera-Effects-Filters-141', - ('zAsset-Adjustment Timestamp-142', 'datetime'), - 'zAddAssetAttr-Editor Bundle ID-143', - 'zAddAssetAttr-Montage-144', - 'zAsset-Favorite-145', - 'zAsset-Hidden-146', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147', - ('zAsset-Trashed Date-148', 'datetime'), - 'zAsset-Trashed by Participant= zSharePartic_zPK-149', - 'zAsset-Delete-Reason-150', - 'zIntResou-Trash State-151', - ('zIntResou-Trashed Date-152', 'datetime'), - 'zAsset-Cloud Delete State-153', - 'zIntResou-Cloud Delete State-154', - 'zAddAssetAttr-PTP Trashed State-155', - 'zIntResou-PTP Trashed State-156', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-157', - ('zMedAnlyAstAttr-Media Analysis Timestamp-158', 'datetime'), - ('zAsset-Analysis State Modification Date-159', 'datetime'), - 'zAddAssetAttr- Pending View Count-160', - 'zAddAssetAttr- View Count-161', - 'zAddAssetAttr- Pending Play Count-162', - 'zAddAssetAttr- Play Count-163', - 'zAddAssetAttr- Pending Share Count-164', - 'zAddAssetAttr- Share Count-165', - 'zAddAssetAttr-Allowed for Analysis-166', - 'zAddAssetAttr-Scene Analysis Version-167', - 'zAddAssetAttr-Scene Analysis is From Preview-168', - ('zAddAssetAttr-Scene Analysis Timestamp-169', 'datetime'), - 'zAsset-Duplication Asset Visibility State-170', - 'zAddAssetAttr-Destination Asset Copy State-171', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-173', - 'zCldMast-Source Master For Duplication Scope ID-174', - 'zAddAssetAttr-Source Asset For Duplication ID-175', - 'zCldMast-Source Master for Duplication ID-176', - 'zAddAssetAttr-Variation Suggestions States-177', - 'zAsset-High Frame Rate State-178', - 'zAsset-Video Key Frame Time Scale-179', - 'zAsset-Video Key Frame Value-180', - 'zExtAttr-ISO-181', - 'zExtAttr-Metering Mode-182', - 'zExtAttr-Sample Rate-183', - 'zExtAttr-Track Format-184', - 'zExtAttr-White Balance-185', - 'zExtAttr-Aperture-186', - 'zExtAttr-BitRate-187', - 'zExtAttr-Exposure Bias-188', - 'zExtAttr-Frames Per Second-189', - 'zExtAttr-Shutter Speed-190', - 'zExtAttr-Slush Scene Bias-191', - 'zExtAttr-Slush Version-192', - 'zExtAttr-Slush Preset-193', - 'zExtAttr-Slush Warm Bias-194', - 'zAsset-Height-195', - 'zAddAssetAttr-Original Height-196', - 'zIntResou-Unoriented Height-197', - 'zAsset-Width-198', - 'zAddAssetAttr-Original Width-199', - 'zIntResou-Unoriented Width-200', - 'zAsset-Thumbnail Index-201', - 'zAddAssetAttr-Embedded Thumbnail Height-202', - 'zAddAssetAttr-Embedded Thumbnail Length-203', - 'zAddAssetAttr-Embedded Thumbnail Offset-204', - 'zAddAssetAttr-Embedded Thumbnail Width-205', - 'zAsset-Packed Acceptable Crop Rect-206', - 'zAsset-Packed Badge Attributes-207', - 'zAsset-Packed Preferred Crop Rect-208', - 'zAsset-Curation Score-209', - 'zAsset-Camera Processing Adjustment State-210', - 'zAsset-Depth Type-211', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212', - 'zAddAssetAttr-Orig Resource Choice-213', - 'zAddAssetAttr-Spatial Over Capture Group ID-214', - 'zAddAssetAttr-Place Annotation Data-215', - 'zAddAssetAttr-Distance Identity-HEX-216', - 'zAddAssetAttr-Edited IPTC Attributes-217', - 'zAddAssetAttr-Title-Comments via Cloud Website-218', - 'zAddAssetAttr-Accessibility Description-219', - 'zAddAssetAttr-Photo Stream Tag ID-220', - 'zAddAssetAttr-Share Type-221', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-222', - 'zAsset-Overall Aesthetic Score-223', - 'zAsset-zENT-224', - 'zAsset-zOPT-225', - 'zAsset-Master= zCldMast-zPK-226', - 'zAsset-Extended Attributes= zExtAttr-zPK-227', - 'zAsset-Import Session Key-228', - 'zAsset-Photo Analysis Attributes Key-229', - 'zAsset-FOK-Cloud Feed Asset Entry Key-230', - 'zAsset-Computed Attributes Asset Key-231', - 'zAsset-Promotion Score-232', - 'zAsset-Media Analysis Attributes Key-233', - 'zAsset-Media Group UUID-234', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235', - 'zAsset.Cloud Collection GUID-236', - 'zAddAssetAttr-zENT-237', - 'ZAddAssetAttr-zOPT-238', - 'zAddAssetAttr-zAsset= zAsset_zPK-239', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241', - 'zAddAssetAttr-Public Global UUID-242', - 'zAddAssetAttr-Original Assets UUID-243', - 'zAddAssetAttr-Originating Asset Identifier-244', - 'zAddAssetAttr.Adjusted Fingerprint-245', - 'zCldMast-zPK= zAsset-Master-246', - 'zCldMast-zENT-247', - 'zCldMast-zOPT-248', - 'zCldMast-Moment Share Key= zShare-zPK-249', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251', - 'zCldMast-Originating Asset ID-252', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253', - 'CMzCldMastMedData-zENT-254', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-255', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256', - 'AAAzCldMastMedData-zENT-257', - 'AAAzCldMastMedData-CldMast key-258', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-260', - 'zExtAttr-zENT-261', - 'zExtAttr-zOPT-262', - 'zExtAttr-Asset Key-263', - 'zIntResou-zPK-264', - 'zIntResou-zENT-265', - 'zIntResou-zOPT-266', - 'zIntResou-Asset= zAsset_zPK-267', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268', - 'zMedAnlyAstAttr-zEnt-269', - 'zMedAnlyAstAttr-zOpt-270', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') + ('zAsset-Added Date-39', 'datetime'), + ('zAsset- SortToken -CameraRoll-40', 'datetime'), + ('zAddAssetAttr-Date Created Source-41', 'datetime'), + ('zAsset-Date Created-42', 'datetime'), + ('zCldMast-Creation Date-43', 'datetime'), + ('zIntResou-CldMst Date Created-44', 'datetime'), + 'zAddAssetAttr-Time Zone Name-45', + 'zAddAssetAttr-Time Zone Offset-46', + 'zAddAssetAttr-Inferred Time Zone Offset-47', + 'zAddAssetAttr-EXIF-String-48', + ('zAsset-Modification Date-49', 'datetime'), + ('zAsset-Last Shared Date-50', 'datetime'), + 'zCldMast-Cloud Local State-51', + ('zCldMast-Import Date-52', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'), + 'zAddAssetAttr-Import Session ID-54', + ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-56', + ('zAsset-Cloud Batch Publish Date-57', 'datetime'), + ('zAsset-Cloud Server Publish Date-58', 'datetime'), + 'zAsset-Cloud Download Requests-59', + 'zAsset-Cloud Batch ID-60', + 'zAddAssetAttr-Upload Attempts-61', + 'zAsset-Latitude-62', + 'zExtAttr-Latitude-63', + 'zAsset-Longitude-64', + 'zExtAttr-Longitude-65', + 'zAddAssetAttr-GPS Horizontal Accuracy-66', + 'zAddAssetAttr-Location Hash-67', + 'zAddAssetAttr-Shifted Location Valid-68', + 'zAddAssetAttr-Shifted Location Data-69', + 'zAddAssetAttr-Reverse Location Is Valid-70', + 'zAddAssetAttr-Reverse Location Data-71', + 'AAAzCldMastMedData-zOPT-72', + 'zAddAssetAttr-Media Metadata Type-73', + 'AAAzCldMastMedData-Data-74', + 'CldMasterzCldMastMedData-zOPT-75', + 'zCldMast-Media Metadata Type-76', + 'CMzCldMastMedData-Data-77', + 'zAddAssetAttr-Syndication History-78', + 'zMedAnlyAstAttr-Syndication Processing Version-79', + 'zMedAnlyAstAttr-Syndication Processing Value-80', + 'zAsset-Orientation-81', + 'zAddAssetAttr-Original Orientation-82', + 'zAsset-Kind-83', + 'zAsset-Kind-Sub-Type-84', + 'zAddAssetAttr-Cloud Kind Sub Type-85', + 'zAsset-Playback Style-86', + 'zAsset-Playback Variation-87', + 'zAsset-Video Duration-88', + 'zExtAttr-Duration-89', + 'zAsset-Video CP Duration-90', + 'zAddAssetAttr-Video CP Duration Time Scale-91', + 'zAsset-Video CP Visibility State-92', + 'zAddAssetAttr-Video CP Display Value-93', + 'zAddAssetAttr-Video CP Display Time Scale-94', + 'zIntResou-Datastore Class ID-95', + 'zAsset-Cloud Placeholder Kind-96', + 'zIntResou-Local Availability-97', + 'zIntResou-Local Availability Target-98', + 'zIntResou-Cloud Local State-99', + 'zIntResou-Remote Availability-100', + 'zIntResou-Remote Availability Target-101', + 'zIntResou-Transient Cloud Master-102', + 'zIntResou-Side Car Index-103', + 'zIntResou- File ID-104', + 'zIntResou-Version-105', + 'zAddAssetAttr- Original-File-Size-106', + 'zIntResou-Resource Type-107', + 'zIntResou-Datastore Sub-Type-108', + 'zIntResou-Cloud Source Type-109', + 'zIntResou-Data Length-110', + 'zIntResou-Recipe ID-111', + ('zIntResou-Cloud Last Prefetch Date-112', 'datetime'), + 'zIntResou-Cloud Prefetch Count-113', + ('zIntResou- Cloud-Last-OnDemand Download-Date-114', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115', + 'zIntResou-Compact-UTI-116', + 'zAsset-Uniform Type ID-117', + 'zAsset-Original Color Space-118', + 'zCldMast-Uniform_Type_ID-119', + 'zCldMast-Full Size JPEG Source-120', + 'zAsset-HDR Gain-121', + 'zAsset-zHDR_Type-122', + 'zExtAttr-Codec-123', + 'zIntResou-Codec Four Char Code Name-124', + 'zCldMast-Codec Name-125', + 'zCldMast-Video Frame Rate-126', + 'zCldMast-Placeholder State-127', + 'zAsset-Depth_Type-128', + 'zAsset-Avalanche UUID-129', + 'zAsset-Avalanche_Pick_Type-BurstAsset-130', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131', + 'zAddAssetAttr-Cloud Recovery State-132', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-133', + 'zAsset-Deferred Processing Needed-134', + 'zAsset-Video Deferred Processing Needed-135', + 'zAddAssetAttr-Deferred Photo Identifier-136', + 'zAddAssetAttr-Deferred Processing Candidate Options-137', + 'zAsset-Has Adjustments-Camera-Effects-Filters-138', + ('zAsset-Adjustment Timestamp-139', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-140', + 'zAddAssetAttr-Montage-141', + 'zAsset-Favorite-142', + 'zAsset-Hidden-143', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144', + ('zAsset-Trashed Date-145', 'datetime'), + 'zIntResou-Trash State-146', + ('zIntResou-Trashed Date-147', 'datetime'), + 'zAsset-Cloud Delete State-148', + 'zIntResou-Cloud Delete State-149', + 'zAddAssetAttr-PTP Trashed State-150', + 'zIntResou-PTP Trashed State-151', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-152', + ('zMedAnlyAstAttr-Media Analysis Timestamp-153', 'datetime'), + ('zAsset-Analysis State Modification Date-154', 'datetime'), + 'zAddAssetAttr- Pending View Count-155', + 'zAddAssetAttr- View Count-156', + 'zAddAssetAttr- Pending Play Count-157', + 'zAddAssetAttr- Play Count-158', + 'zAddAssetAttr- Pending Share Count-159', + 'zAddAssetAttr- Share Count-160', + 'zAddAssetAttr-Allowed for Analysis-161', + 'zAddAssetAttr-Scene Analysis Version-162', + 'zAddAssetAttr-Scene Analysis is From Preview-163', + ('zAddAssetAttr-Scene Analysis Timestamp-164', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-165', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-166', + 'zCldMast-Source Master For Duplication Scope ID-167', + 'zAddAssetAttr-Source Asset For Duplication ID-168', + 'zCldMast-Source Master for Duplication ID-169', + 'zAddAssetAttr-Variation Suggestions States-170', + 'zAsset-High Frame Rate State-171', + 'zAsset-Video Key Frame Time Scale-172', + 'zAsset-Video Key Frame Value-173', + 'zExtAttr-ISO-174', + 'zExtAttr-Metering Mode-175', + 'zExtAttr-Sample Rate-176', + 'zExtAttr-Track Format-177', + 'zExtAttr-White Balance-178', + 'zExtAttr-Aperture-179', + 'zExtAttr-BitRate-180', + 'zExtAttr-Exposure Bias-181', + 'zExtAttr-Frames Per Second-182', + 'zExtAttr-Shutter Speed-183', + 'zExtAttr-Slush Scene Bias-184', + 'zExtAttr-Slush Version-185', + 'zExtAttr-Slush Preset-186', + 'zExtAttr-Slush Warm Bias-187', + 'zAsset-Height-188', + 'zAddAssetAttr-Original Height-189', + 'zIntResou-Unoriented Height-190', + 'zAsset-Width-191', + 'zAddAssetAttr-Original Width-192', + 'zIntResou-Unoriented Width-193', + 'zAsset-Thumbnail Index-194', + 'zAddAssetAttr-Embedded Thumbnail Height-195', + 'zAddAssetAttr-Embedded Thumbnail Length-196', + 'zAddAssetAttr-Embedded Thumbnail Offset-197', + 'zAddAssetAttr-Embedded Thumbnail Width-198', + 'zAsset-Packed Acceptable Crop Rect-199', + 'zAsset-Packed Badge Attributes-200', + 'zAsset-Packed Preferred Crop Rect-201', + 'zAsset-Curation Score-202', + 'zAsset-Camera Processing Adjustment State-203', + 'zAsset-Depth Type-204', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205', + 'zAddAssetAttr-Orig Resource Choice-206', + 'zAddAssetAttr-Spatial Over Capture Group ID-207', + 'zAddAssetAttr-Place Annotation Data-208', + 'zAddAssetAttr-Distance Identity-HEX-209', + 'zAddAssetAttr-Edited IPTC Attributes-210', + 'zAddAssetAttr-Title-Comments via Cloud Website-211', + 'zAddAssetAttr-Accessibility Description-212', + 'zAddAssetAttr-Photo Stream Tag ID-213', + 'zAddAssetAttr-Share Type-214', + 'zAsset-Overall Aesthetic Score-215', + 'zAsset-zENT-216', + 'zAsset-zOPT-217', + 'zAsset-Master= zCldMast-zPK-218', + 'zAsset-Extended Attributes= zExtAttr-zPK-219', + 'zAsset-Import Session Key-220', + 'zAsset-FOK-Cloud Feed Asset Entry Key-221', + 'zAsset-Computed Attributes Asset Key-222', + 'zAsset-Promotion Score-223', + 'zAsset-Media Analysis Attributes Key-224', + 'zAsset-Media Group UUID-225', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226', + 'zAsset.Cloud Collection GUID-227', + 'zAddAssetAttr-zENT-228', + 'ZAddAssetAttr-zOPT-229', + 'zAddAssetAttr-zAsset= zAsset_zPK-230', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232', + 'zAddAssetAttr-Public Global UUID-233', + 'zAddAssetAttr-Original Assets UUID-234', + 'zAddAssetAttr-Originating Asset Identifier-235', + 'zAddAssetAttr.Adjusted Fingerprint-236', + 'zCldMast-zPK= zAsset-Master-237', + 'zCldMast-zENT-238', + 'zCldMast-zOPT-239', + 'zCldMast-Moment Share Key= zShare-zPK-240', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242', + 'zCldMast-Originating Asset ID-243', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244', + 'CMzCldMastMedData-zENT-245', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-246', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247', + 'AAAzCldMastMedData-zENT-248', + 'AAAzCldMastMedData-CldMast key-249', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-251', + 'zExtAttr-zENT-252', + 'zExtAttr-zOPT-253', + 'zExtAttr-Asset Key-254', + 'zIntResou-zPK-255', + 'zIntResou-zENT-256', + 'zIntResou-zOPT-257', + 'zIntResou-Asset= zAsset_zPK-258', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259', + 'zMedAnlyAstAttr-zEnt-260', + 'zMedAnlyAstAttr-zOpt-261', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): source_path = get_file_path(files_found, "Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -9065,7 +9159,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', - zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', CASE zIntResou.ZLOCALAVAILABILITY WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' @@ -9313,7 +9406,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim WHEN -1.0 THEN '-1.0' ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' WHEN 1 THEN '1-Shifted Location Valid-1' @@ -9740,7 +9833,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim END AS 'zIntResou-PTP Trashed State', zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', @@ -9815,16 +9908,12 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', - zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV_file', CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE WHEN 0 THEN '0-JPEG Original Resource-0' WHEN 1 THEN '1-RAW Original Resource-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' END AS 'zAddAssetAttr-Orig Resource Choice', - CASE zAsset.ZSPATIALTYPE - WHEN 0 THEN '0-UnknownTesting-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' - END AS 'zAsset-Spatial Type', zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', @@ -9848,7 +9937,6 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', - zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', @@ -9934,257 +10022,1418 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274])) + row[268], row[269], row[270], row[271])) data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Master Fingerprint-4', - 'zAddAssetAttr.Adjusted Fingerprint-5', - 'zIntResou-Fingerprint-6', - 'zIntResou-Local Availability-4QueryStart-7', - 'zIntResou-Remote Availability-4QueryStart-8', - 'zIntResou-Resource Type-4QueryStart-9', - 'zIntResou-Datastore Sub-Type-4QueryStart-10', - 'zIntResou-Recipe ID-4QueryStart-11', - 'zAsset Complete-12', - 'zAsset-Bundle Scope-13', - 'zAsset-Syndication State-14', - 'zAsset-Cloud is My Asset-15', - 'zAsset-Cloud is deletable-Asset-16', - 'zAsset-Cloud_Local_State-17', - 'zAsset-Visibility State-18', - 'zExtAttr-Camera Make-19', - 'zExtAttr-Camera Model-20', - 'zExtAttr-Lens Model-21', - 'zExtAttr-Flash Fired-22', - 'zExtAttr-Focal Lenght-23', - 'zExtAttr-Focal Length in 35MM-24', - 'zExtAttr-Digital Zoom Ratio-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Imported by-28', - 'zCldMast-Imported By-29', - 'zAddAssetAttr.Imported by Bundle Identifier-30', - 'zAddAssetAttr-Imported By Display Name-31', - 'zCldMast-Imported by Bundle ID-32', - 'zCldMast-Imported by Display Name-33', - 'zAsset-Saved Asset Type-34', - 'zAsset-Directory-Path-35', - 'zAsset-Filename-36', - 'zAddAssetAttr- Original Filename-37', - 'zCldMast- Original Filename-38', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', - 'zAsset-Active Library Scope Participation State-40', - 'zAsset-Library Scope Share State- StillTesting-41', - ('zAsset-Added Date-42', 'datetime'), - ('zAsset- SortToken -CameraRoll-43', 'datetime'), - ('zAddAssetAttr-Date Created Source-44', 'datetime'), - ('zAsset-Date Created-45', 'datetime'), - ('zCldMast-Creation Date-46', 'datetime'), - ('zIntResou-CldMst Date Created-47', 'datetime'), - 'zAddAssetAttr-Time Zone Name-48', - 'zAddAssetAttr-Time Zone Offset-49', - 'zAddAssetAttr-Inferred Time Zone Offset-50', - 'zAddAssetAttr-EXIF-String-51', - ('zAsset-Modification Date-52', 'datetime'), - ('zAsset-Last Shared Date-53', 'datetime'), - 'zCldMast-Cloud Local State-54', - ('zCldMast-Import Date-55', 'datetime'), - ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'), - 'zAddAssetAttr-Import Session ID-57', - ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'), - 'zCldMast-Import Session ID- AirDrop-StillTesting-59', - ('zAsset-Cloud Batch Publish Date-60', 'datetime'), - ('zAsset-Cloud Server Publish Date-61', 'datetime'), - 'zAsset-Cloud Download Requests-62', - 'zAsset-Cloud Batch ID-63', - 'zAddAssetAttr-Upload Attempts-64', - 'zAsset-Latitude-65', - 'zExtAttr-Latitude-66', - 'zAsset-Longitude-67', - 'zExtAttr-Longitude-68', - 'zAddAssetAttr-GPS Horizontal Accuracy-69', - 'zAddAssetAttr-Location Hash-70', - 'zAddAssetAttr-Shifted Location Valid-71', - 'zAddAssetAttr-Shifted Location Data-72', - 'zAddAssetAttr-Reverse Location Is Valid-73', - 'zAddAssetAttr-Reverse Location Data-74', - 'AAAzCldMastMedData-zOPT-75', - 'zAddAssetAttr-Media Metadata Type-76', - 'AAAzCldMastMedData-Data-77', - 'CldMasterzCldMastMedData-zOPT-78', - 'zCldMast-Media Metadata Type-79', - 'CMzCldMastMedData-Data-80', - 'zAsset-Search Index Rebuild State-81', - 'zAddAssetAttr-Syndication History-82', - 'zMedAnlyAstAttr-Syndication Processing Version-83', - 'zMedAnlyAstAttr-Syndication Processing Value-84', - 'zAsset-Orientation-85', - 'zAddAssetAttr-Original Orientation-86', - 'zAsset-Kind-87', - 'zAsset-Kind-Sub-Type-88', - 'zAddAssetAttr-Cloud Kind Sub Type-89', - 'zAsset-Playback Style-90', - 'zAsset-Playback Variation-91', - 'zAsset-Video Duration-92', - 'zExtAttr-Duration-93', - 'zAsset-Video CP Duration-94', - 'zAddAssetAttr-Video CP Duration Time Scale-95', - 'zAsset-Video CP Visibility State-96', - 'zAddAssetAttr-Video CP Display Value-97', - 'zAddAssetAttr-Video CP Display Time Scale-98', - 'zIntResou-Datastore Class ID-99', - 'zAsset-Cloud Placeholder Kind-100', - 'zIntResou-Local Availability-101', - 'zIntResou-Local Availability Target-102', - 'zIntResou-Cloud Local State-103', - 'zIntResou-Remote Availability-104', - 'zIntResou-Remote Availability Target-105', - 'zIntResou-Transient Cloud Master-106', - 'zIntResou-Side Car Index-107', - 'zIntResou- File ID-108', - 'zIntResou-Version-109', - 'zAddAssetAttr- Original-File-Size-110', - 'zIntResou-Resource Type-111', - 'zIntResou-Datastore Sub-Type-112', - 'zIntResou-Cloud Source Type-113', - 'zIntResou-Data Length-114', - 'zIntResou-Recipe ID-115', - ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'), - 'zIntResou-Cloud Prefetch Count-117', - ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'), - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', - 'zIntResou-Compact-UTI-120', - 'zAsset-Uniform Type ID-121', - 'zAsset-Original Color Space-122', - 'zCldMast-Uniform_Type_ID-123', - 'zCldMast-Full Size JPEG Source-124', - 'zAsset-HDR Gain-125', - 'zAsset-zHDR_Type-126', - 'zExtAttr-Codec-127', - 'zIntResou-Codec Four Char Code Name-128', - 'zCldMast-Codec Name-129', - 'zCldMast-Video Frame Rate-130', - 'zCldMast-Placeholder State-131', - 'zAsset-Depth_Type-132', - 'zAsset-Avalanche UUID-133', - 'zAsset-Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', - 'zAddAssetAttr-Cloud Recovery State-136', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', - 'zAsset-Deferred Processing Needed-138', - 'zAsset-Video Deferred Processing Needed-139', - 'zAddAssetAttr-Deferred Photo Identifier-140', - 'zAddAssetAttr-Deferred Processing Candidate Options-141', - 'zAsset-Has Adjustments-Camera-Effects-Filters-142', - ('zAsset-Adjustment Timestamp-143', 'datetime'), - 'zAddAssetAttr-Editor Bundle ID-144', - 'zAddAssetAttr-Montage-145', - 'zAsset-Favorite-146', - 'zAsset-Hidden-147', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', - ('zAsset-Trashed Date-149', 'datetime'), - 'zAsset-Trashed by Participant= zSharePartic_zPK-150', - 'zAsset-Delete-Reason-151', - 'zIntResou-Trash State-152', - ('zIntResou-Trashed Date-153', 'datetime'), - 'zAsset-Cloud Delete State-154', - 'zIntResou-Cloud Delete State-155', - 'zAddAssetAttr-PTP Trashed State-156', - 'zIntResou-PTP Trashed State-157', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', - ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'), - ('zAsset-Analysis State Modification Date-160', 'datetime'), - 'zAddAssetAttr- Pending View Count-161', - 'zAddAssetAttr- View Count-162', - 'zAddAssetAttr- Pending Play Count-163', - 'zAddAssetAttr- Play Count-164', - 'zAddAssetAttr- Pending Share Count-165', - 'zAddAssetAttr- Share Count-166', - 'zAddAssetAttr-Allowed for Analysis-167', - 'zAddAssetAttr-Scene Analysis Version-168', - 'zAddAssetAttr-Scene Analysis is From Preview-169', - ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'), - 'zAsset-Duplication Asset Visibility State-171', - 'zAddAssetAttr-Destination Asset Copy State-172', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', - 'zCldMast-Source Master For Duplication Scope ID-175', - 'zAddAssetAttr-Source Asset For Duplication ID-176', - 'zCldMast-Source Master for Duplication ID-177', - 'zAddAssetAttr-Variation Suggestions States-178', - 'zAsset-High Frame Rate State-179', - 'zAsset-Video Key Frame Time Scale-180', - 'zAsset-Video Key Frame Value-181', - 'zExtAttr-ISO-182', - 'zExtAttr-Metering Mode-183', - 'zExtAttr-Sample Rate-184', - 'zExtAttr-Track Format-185', - 'zExtAttr-White Balance-186', - 'zExtAttr-Aperture-187', - 'zExtAttr-BitRate-188', - 'zExtAttr-Exposure Bias-189', - 'zExtAttr-Frames Per Second-190', - 'zExtAttr-Shutter Speed-191', - 'zExtAttr-Slush Scene Bias-192', - 'zExtAttr-Slush Version-193', - 'zExtAttr-Slush Preset-194', - 'zExtAttr-Slush Warm Bias-195', - 'zAsset-Height-196', - 'zAddAssetAttr-Original Height-197', - 'zIntResou-UnOriented Height-198', - 'zAsset-Width-199', - 'zAddAssetAttr-Original Width-200', - 'zIntResou-UnOriented Width-201', - 'zAsset-Thumbnail Index-202', - 'zAddAssetAttr-Embedded Thumbnail Height-203', - 'zAddAssetAttr-Embedded Thumbnail Length-204', - 'zAddAssetAttr-Embedded Thumbnail Offset-205', - 'zAddAssetAttr-Embedded Thumbnail Width-206', - 'zAsset-Packed Acceptable Crop Rect-207', - 'zAsset-Packed Badge Attributes-208', - 'zAsset-Packed Preferred Crop Rect-209', - 'zAsset-Curation Score-210', - 'zAsset-Camera Processing Adjustment State-211', - 'zAsset-Depth Type-212', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', - 'zAddAssetAttr-Orig Resource Choice-214', - 'zAsset-Spatial Type-215', - 'zAddAssetAttr-Spatial Over Capture Group ID-216', - 'zAddAssetAttr-Place Annotation Data-217', - 'zAddAssetAttr-Distance Identity-HEX-218', - 'zAddAssetAttr-Edited IPTC Attributes-219', - 'zAddAssetAttr-Title-Comments via Cloud Website-220', - 'zAddAssetAttr-Accessibility Description-221', - 'zAddAssetAttr-Photo Stream Tag ID-222', - 'zAddAssetAttr-Share Type-223', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', - 'zAsset-Overall Aesthetic Score-225', - 'zAsset-zENT-226', - 'zAsset-zOPT-227', - 'zAsset-Master= zCldMast-zPK-228', - 'zAsset-Extended Attributes= zExtAttr-zPK-229', - 'zAsset-Import Session Key-230', - 'zAsset-Photo Analysis Attributes Key-231', - 'zAsset-FOK-Cloud Feed Asset Entry Key-232', - 'zAsset-Computed Attributes Asset Key-233', - 'zAsset-Promotion Score-234', - 'zAsset-Iconic Score-235', - 'zAsset-Media Analysis Attributes Key-236', - 'zAsset-Media Group UUID-237', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', - 'zAsset.Cloud Collection GUID-239', - 'zAddAssetAttr-zENT-240', - 'ZAddAssetAttr-zOPT-241', - 'zAddAssetAttr-zAsset= zAsset_zPK-242', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', - 'zAddAssetAttr-Public Global UUID-245', - 'zAddAssetAttr-Original Assets UUID-246', - 'zAddAssetAttr-Originating Asset Identifier-247', - 'zAddAssetAttr.Adjusted Fingerprint-248', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Lenght-22', + 'zExtAttr-Focal Lenth in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + 'zAsset-Active Library Scope Participation State-39', + 'zAsset-Library Scope Share State- StillTesting-40', + ('zAsset-Added Date-41', 'datetime'), + ('zAsset- SortToken -CameraRoll-42', 'datetime'), + ('zAddAssetAttr-Date Created Source-43', 'datetime'), + ('zAsset-Date Created-44', 'datetime'), + ('zCldMast-Creation Date-45', 'datetime'), + ('zIntResou-CldMst Date Created-46', 'datetime'), + 'zAddAssetAttr-Time Zone Name-47', + 'zAddAssetAttr-Time Zone Offset-48', + 'zAddAssetAttr-Inferred Time Zone Offset-49', + 'zAddAssetAttr-EXIF-String-50', + ('zAsset-Modification Date-51', 'datetime'), + ('zAsset-Last Shared Date-52', 'datetime'), + 'zCldMast-Cloud Local State-53', + ('zCldMast-Import Date-54', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'), + 'zAddAssetAttr-Import Session ID-56', + ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-58', + ('zAsset-Cloud Batch Publish Date-59', 'datetime'), + ('zAsset-Cloud Server Publish Date-60', 'datetime'), + 'zAsset-Cloud Download Requests-61', + 'zAsset-Cloud Batch ID-62', + 'zAddAssetAttr-Upload Attempts-63', + 'zAsset-Latitude-64', + 'zExtAttr-Latitude-65', + 'zAsset-Longitude-66', + 'zExtAttr-Longitude-67', + 'zAddAssetAttr-GPS Horizontal Accuracy-68', + 'zAddAssetAttr-Location Hash-69', + 'zAddAssetAttr-Shifted Location Valid-70', + 'zAddAssetAttr-Shifted Location Data-71', + 'zAddAssetAttr-Reverse Location Is Valid-72', + 'zAddAssetAttr-Reverse Location Data-73', + 'AAAzCldMastMedData-zOPT-74', + 'zAddAssetAttr-Media Metadata Type-75', + 'AAAzCldMastMedData-Data-76', + 'CldMasterzCldMastMedData-zOPT-77', + 'zCldMast-Media Metadata Type-78', + 'CMzCldMastMedData-Data-79', + 'zAsset-Search Index Rebuild State-80', + 'zAddAssetAttr-Syndication History-81', + 'zMedAnlyAstAttr-Syndication Processing Version-82', + 'zMedAnlyAstAttr-Syndication Processing Value-83', + 'zAsset-Orientation-84', + 'zAddAssetAttr-Original Orientation-85', + 'zAsset-Kind-86', + 'zAsset-Kind-Sub-Type-87', + 'zAddAssetAttr-Cloud Kind Sub Type-88', + 'zAsset-Playback Style-89', + 'zAsset-Playback Variation-90', + 'zAsset-Video Duration-91', + 'zExtAttr-Duration-92', + 'zAsset-Video CP Duration-93', + 'zAddAssetAttr-Video CP Duration Time Scale-94', + 'zAsset-Video CP Visibility State-95', + 'zAddAssetAttr-Video CP Display Value-96', + 'zAddAssetAttr-Video CP Display Time Scale-97', + 'zIntResou-Datastore Class ID-98', + 'zAsset-Cloud Placeholder Kind-99', + 'zIntResou-Local Availability-100', + 'zIntResou-Local Availability Target-101', + 'zIntResou-Cloud Local State-102', + 'zIntResou-Remote Availability-103', + 'zIntResou-Remote Availability Target-104', + 'zIntResou-Transient Cloud Master-105', + 'zIntResou-Side Car Index-106', + 'zIntResou- File ID-107', + 'zIntResou-Version-108', + 'zAddAssetAttr- Original-File-Size-109', + 'zIntResou-Resource Type-110', + 'zIntResou-Datastore Sub-Type-111', + 'zIntResou-Cloud Source Type-112', + 'zIntResou-Data Length-113', + 'zIntResou-Recipe ID-114', + ('zIntResou-Cloud Last Prefetch Date-115', 'datetime'), + 'zIntResou-Cloud Prefetch Count-116', + ('zIntResou- Cloud-Last-OnDemand Download-Date-117', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118', + 'zIntResou-Compact-UTI-119', + 'zAsset-Uniform Type ID-120', + 'zAsset-Original Color Space-121', + 'zCldMast-Uniform_Type_ID-122', + 'zCldMast-Full Size JPEG Source-123', + 'zAsset-HDR Gain-124', + 'zAsset-zHDR_Type-125', + 'zExtAttr-Codec-126', + 'zIntResou-Codec Four Char Code Name-127', + 'zCldMast-Codec Name-128', + 'zCldMast-Video Frame Rate-129', + 'zCldMast-Placeholder State-130', + 'zAsset-Depth_Type-131', + 'zAsset-Avalanche UUID-132', + 'zAsset-Avalanche_Pick_Type-BurstAsset-133', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud Recovery State-135', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', + 'zAsset-Deferred Processing Needed-137', + 'zAsset-Video Deferred Processing Needed-138', + 'zAddAssetAttr-Deferred Photo Identifier-139', + 'zAddAssetAttr-Deferred Processing Candidate Options-140', + 'zAsset-Has Adjustments-Camera-Effects-Filters-141', + ('zAsset-Adjustment Timestamp-142', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-143', + 'zAddAssetAttr-Montage-144', + 'zAsset-Favorite-145', + 'zAsset-Hidden-146', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147', + ('zAsset-Trashed Date-148', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-149', + 'zAsset-Delete-Reason-150', + 'zIntResou-Trash State-151', + ('zIntResou-Trashed Date-152', 'datetime'), + 'zAsset-Cloud Delete State-153', + 'zIntResou-Cloud Delete State-154', + 'zAddAssetAttr-PTP Trashed State-155', + 'zIntResou-PTP Trashed State-156', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-157', + ('zMedAnlyAstAttr-Media Analysis Timestamp-158', 'datetime'), + ('zAsset-Analysis State Modification Date-159', 'datetime'), + 'zAddAssetAttr- Pending View Count-160', + 'zAddAssetAttr- View Count-161', + 'zAddAssetAttr- Pending Play Count-162', + 'zAddAssetAttr- Play Count-163', + 'zAddAssetAttr- Pending Share Count-164', + 'zAddAssetAttr- Share Count-165', + 'zAddAssetAttr-Allowed for Analysis-166', + 'zAddAssetAttr-Scene Analysis Version-167', + 'zAddAssetAttr-Scene Analysis is From Preview-168', + ('zAddAssetAttr-Scene Analysis Timestamp-169', 'datetime'), + 'zAsset-Duplication Asset Visibility State-170', + 'zAddAssetAttr-Destination Asset Copy State-171', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-173', + 'zCldMast-Source Master For Duplication Scope ID-174', + 'zAddAssetAttr-Source Asset For Duplication ID-175', + 'zCldMast-Source Master for Duplication ID-176', + 'zAddAssetAttr-Variation Suggestions States-177', + 'zAsset-High Frame Rate State-178', + 'zAsset-Video Key Frame Time Scale-179', + 'zAsset-Video Key Frame Value-180', + 'zExtAttr-ISO-181', + 'zExtAttr-Metering Mode-182', + 'zExtAttr-Sample Rate-183', + 'zExtAttr-Track Format-184', + 'zExtAttr-White Balance-185', + 'zExtAttr-Aperture-186', + 'zExtAttr-BitRate-187', + 'zExtAttr-Exposure Bias-188', + 'zExtAttr-Frames Per Second-189', + 'zExtAttr-Shutter Speed-190', + 'zExtAttr-Slush Scene Bias-191', + 'zExtAttr-Slush Version-192', + 'zExtAttr-Slush Preset-193', + 'zExtAttr-Slush Warm Bias-194', + 'zAsset-Height-195', + 'zAddAssetAttr-Original Height-196', + 'zIntResou-Unoriented Height-197', + 'zAsset-Width-198', + 'zAddAssetAttr-Original Width-199', + 'zIntResou-Unoriented Width-200', + 'zAsset-Thumbnail Index-201', + 'zAddAssetAttr-Embedded Thumbnail Height-202', + 'zAddAssetAttr-Embedded Thumbnail Length-203', + 'zAddAssetAttr-Embedded Thumbnail Offset-204', + 'zAddAssetAttr-Embedded Thumbnail Width-205', + 'zAsset-Packed Acceptable Crop Rect-206', + 'zAsset-Packed Badge Attributes-207', + 'zAsset-Packed Preferred Crop Rect-208', + 'zAsset-Curation Score-209', + 'zAsset-Camera Processing Adjustment State-210', + 'zAsset-Depth Type-211', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212', + 'zAddAssetAttr-Orig Resource Choice-213', + 'zAddAssetAttr-Spatial Over Capture Group ID-214', + 'zAddAssetAttr-Place Annotation Data-215', + 'zAddAssetAttr-Distance Identity-HEX-216', + 'zAddAssetAttr-Edited IPTC Attributes-217', + 'zAddAssetAttr-Title-Comments via Cloud Website-218', + 'zAddAssetAttr-Accessibility Description-219', + 'zAddAssetAttr-Photo Stream Tag ID-220', + 'zAddAssetAttr-Share Type-221', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-222', + 'zAsset-Overall Aesthetic Score-223', + 'zAsset-zENT-224', + 'zAsset-zOPT-225', + 'zAsset-Master= zCldMast-zPK-226', + 'zAsset-Extended Attributes= zExtAttr-zPK-227', + 'zAsset-Import Session Key-228', + 'zAsset-Photo Analysis Attributes Key-229', + 'zAsset-FOK-Cloud Feed Asset Entry Key-230', + 'zAsset-Computed Attributes Asset Key-231', + 'zAsset-Promotion Score-232', + 'zAsset-Media Analysis Attributes Key-233', + 'zAsset-Media Group UUID-234', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235', + 'zAsset.Cloud Collection GUID-236', + 'zAddAssetAttr-zENT-237', + 'ZAddAssetAttr-zOPT-238', + 'zAddAssetAttr-zAsset= zAsset_zPK-239', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241', + 'zAddAssetAttr-Public Global UUID-242', + 'zAddAssetAttr-Original Assets UUID-243', + 'zAddAssetAttr-Originating Asset Identifier-244', + 'zAddAssetAttr.Adjusted Fingerprint-245', + 'zCldMast-zPK= zAsset-Master-246', + 'zCldMast-zENT-247', + 'zCldMast-zOPT-248', + 'zCldMast-Moment Share Key= zShare-zPK-249', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251', + 'zCldMast-Originating Asset ID-252', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253', + 'CMzCldMastMedData-zENT-254', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-255', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256', + 'AAAzCldMastMedData-zENT-257', + 'AAAzCldMastMedData-CldMast key-258', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-260', + 'zExtAttr-zENT-261', + 'zExtAttr-zOPT-262', + 'zExtAttr-Asset Key-263', + 'zIntResou-zPK-264', + 'zIntResou-zENT-265', + 'zIntResou-zOPT-266', + 'zIntResou-Asset= zAsset_zPK-267', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268', + 'zMedAnlyAstAttr-zEnt-269', + 'zMedAnlyAstAttr-zOpt-270', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability-4QueryStart', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability-4QueryStart', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type-4QueryStart', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type-4QueryStart', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID-4QueryStart', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zAsset.ZCLOUDPLACEHOLDERKIND + WHEN 0 THEN '0-Local&CloudMaster Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' + WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' + WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' + WHEN 6 THEN '6-StillTesting-6' + WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' + WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' + WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' + END AS 'zAsset-Cloud Placeholder Kind', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZHASADJUSTMENTS + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 1 THEN '1-Yes-Adjustments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' + END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274])) + + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Master Fingerprint-4', + 'zAddAssetAttr.Adjusted Fingerprint-5', + 'zIntResou-Fingerprint-6', + 'zIntResou-Local Availability-4QueryStart-7', + 'zIntResou-Remote Availability-4QueryStart-8', + 'zIntResou-Resource Type-4QueryStart-9', + 'zIntResou-Datastore Sub-Type-4QueryStart-10', + 'zIntResou-Recipe ID-4QueryStart-11', + 'zAsset Complete-12', + 'zAsset-Bundle Scope-13', + 'zAsset-Syndication State-14', + 'zAsset-Cloud is My Asset-15', + 'zAsset-Cloud is deletable-Asset-16', + 'zAsset-Cloud_Local_State-17', + 'zAsset-Visibility State-18', + 'zExtAttr-Camera Make-19', + 'zExtAttr-Camera Model-20', + 'zExtAttr-Lens Model-21', + 'zExtAttr-Flash Fired-22', + 'zExtAttr-Focal Lenght-23', + 'zExtAttr-Focal Length in 35MM-24', + 'zExtAttr-Digital Zoom Ratio-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Imported by-28', + 'zCldMast-Imported By-29', + 'zAddAssetAttr.Imported by Bundle Identifier-30', + 'zAddAssetAttr-Imported By Display Name-31', + 'zCldMast-Imported by Bundle ID-32', + 'zCldMast-Imported by Display Name-33', + 'zAsset-Saved Asset Type-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State-40', + 'zAsset-Library Scope Share State- StillTesting-41', + ('zAsset-Added Date-42', 'datetime'), + ('zAsset- SortToken -CameraRoll-43', 'datetime'), + ('zAddAssetAttr-Date Created Source-44', 'datetime'), + ('zAsset-Date Created-45', 'datetime'), + ('zCldMast-Creation Date-46', 'datetime'), + ('zIntResou-CldMst Date Created-47', 'datetime'), + 'zAddAssetAttr-Time Zone Name-48', + 'zAddAssetAttr-Time Zone Offset-49', + 'zAddAssetAttr-Inferred Time Zone Offset-50', + 'zAddAssetAttr-EXIF-String-51', + ('zAsset-Modification Date-52', 'datetime'), + ('zAsset-Last Shared Date-53', 'datetime'), + 'zCldMast-Cloud Local State-54', + ('zCldMast-Import Date-55', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'), + 'zAddAssetAttr-Import Session ID-57', + ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-59', + ('zAsset-Cloud Batch Publish Date-60', 'datetime'), + ('zAsset-Cloud Server Publish Date-61', 'datetime'), + 'zAsset-Cloud Download Requests-62', + 'zAsset-Cloud Batch ID-63', + 'zAddAssetAttr-Upload Attempts-64', + 'zAsset-Latitude-65', + 'zExtAttr-Latitude-66', + 'zAsset-Longitude-67', + 'zExtAttr-Longitude-68', + 'zAddAssetAttr-GPS Horizontal Accuracy-69', + 'zAddAssetAttr-Location Hash-70', + 'zAddAssetAttr-Shifted Location Valid-71', + 'zAddAssetAttr-Shifted Location Data-72', + 'zAddAssetAttr-Reverse Location Is Valid-73', + 'zAddAssetAttr-Reverse Location Data-74', + 'AAAzCldMastMedData-zOPT-75', + 'zAddAssetAttr-Media Metadata Type-76', + 'AAAzCldMastMedData-Data-77', + 'CldMasterzCldMastMedData-zOPT-78', + 'zCldMast-Media Metadata Type-79', + 'CMzCldMastMedData-Data-80', + 'zAsset-Search Index Rebuild State-81', + 'zAddAssetAttr-Syndication History-82', + 'zMedAnlyAstAttr-Syndication Processing Version-83', + 'zMedAnlyAstAttr-Syndication Processing Value-84', + 'zAsset-Orientation-85', + 'zAddAssetAttr-Original Orientation-86', + 'zAsset-Kind-87', + 'zAsset-Kind-Sub-Type-88', + 'zAddAssetAttr-Cloud Kind Sub Type-89', + 'zAsset-Playback Style-90', + 'zAsset-Playback Variation-91', + 'zAsset-Video Duration-92', + 'zExtAttr-Duration-93', + 'zAsset-Video CP Duration-94', + 'zAddAssetAttr-Video CP Duration Time Scale-95', + 'zAsset-Video CP Visibility State-96', + 'zAddAssetAttr-Video CP Display Value-97', + 'zAddAssetAttr-Video CP Display Time Scale-98', + 'zIntResou-Datastore Class ID-99', + 'zAsset-Cloud Placeholder Kind-100', + 'zIntResou-Local Availability-101', + 'zIntResou-Local Availability Target-102', + 'zIntResou-Cloud Local State-103', + 'zIntResou-Remote Availability-104', + 'zIntResou-Remote Availability Target-105', + 'zIntResou-Transient Cloud Master-106', + 'zIntResou-Side Car Index-107', + 'zIntResou- File ID-108', + 'zIntResou-Version-109', + 'zAddAssetAttr- Original-File-Size-110', + 'zIntResou-Resource Type-111', + 'zIntResou-Datastore Sub-Type-112', + 'zIntResou-Cloud Source Type-113', + 'zIntResou-Data Length-114', + 'zIntResou-Recipe ID-115', + ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'), + 'zIntResou-Cloud Prefetch Count-117', + ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', + 'zIntResou-Compact-UTI-120', + 'zAsset-Uniform Type ID-121', + 'zAsset-Original Color Space-122', + 'zCldMast-Uniform_Type_ID-123', + 'zCldMast-Full Size JPEG Source-124', + 'zAsset-HDR Gain-125', + 'zAsset-zHDR_Type-126', + 'zExtAttr-Codec-127', + 'zIntResou-Codec Four Char Code Name-128', + 'zCldMast-Codec Name-129', + 'zCldMast-Video Frame Rate-130', + 'zCldMast-Placeholder State-131', + 'zAsset-Depth_Type-132', + 'zAsset-Avalanche UUID-133', + 'zAsset-Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', + 'zAddAssetAttr-Cloud Recovery State-136', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', + 'zAsset-Deferred Processing Needed-138', + 'zAsset-Video Deferred Processing Needed-139', + 'zAddAssetAttr-Deferred Photo Identifier-140', + 'zAddAssetAttr-Deferred Processing Candidate Options-141', + 'zAsset-Has Adjustments-Camera-Effects-Filters-142', + ('zAsset-Adjustment Timestamp-143', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-144', + 'zAddAssetAttr-Montage-145', + 'zAsset-Favorite-146', + 'zAsset-Hidden-147', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', + ('zAsset-Trashed Date-149', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-150', + 'zAsset-Delete-Reason-151', + 'zIntResou-Trash State-152', + ('zIntResou-Trashed Date-153', 'datetime'), + 'zAsset-Cloud Delete State-154', + 'zIntResou-Cloud Delete State-155', + 'zAddAssetAttr-PTP Trashed State-156', + 'zIntResou-PTP Trashed State-157', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', + ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'), + ('zAsset-Analysis State Modification Date-160', 'datetime'), + 'zAddAssetAttr- Pending View Count-161', + 'zAddAssetAttr- View Count-162', + 'zAddAssetAttr- Pending Play Count-163', + 'zAddAssetAttr- Play Count-164', + 'zAddAssetAttr- Pending Share Count-165', + 'zAddAssetAttr- Share Count-166', + 'zAddAssetAttr-Allowed for Analysis-167', + 'zAddAssetAttr-Scene Analysis Version-168', + 'zAddAssetAttr-Scene Analysis is From Preview-169', + ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'), + 'zAsset-Duplication Asset Visibility State-171', + 'zAddAssetAttr-Destination Asset Copy State-172', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', + 'zCldMast-Source Master For Duplication Scope ID-175', + 'zAddAssetAttr-Source Asset For Duplication ID-176', + 'zCldMast-Source Master for Duplication ID-177', + 'zAddAssetAttr-Variation Suggestions States-178', + 'zAsset-High Frame Rate State-179', + 'zAsset-Video Key Frame Time Scale-180', + 'zAsset-Video Key Frame Value-181', + 'zExtAttr-ISO-182', + 'zExtAttr-Metering Mode-183', + 'zExtAttr-Sample Rate-184', + 'zExtAttr-Track Format-185', + 'zExtAttr-White Balance-186', + 'zExtAttr-Aperture-187', + 'zExtAttr-BitRate-188', + 'zExtAttr-Exposure Bias-189', + 'zExtAttr-Frames Per Second-190', + 'zExtAttr-Shutter Speed-191', + 'zExtAttr-Slush Scene Bias-192', + 'zExtAttr-Slush Version-193', + 'zExtAttr-Slush Preset-194', + 'zExtAttr-Slush Warm Bias-195', + 'zAsset-Height-196', + 'zAddAssetAttr-Original Height-197', + 'zIntResou-UnOriented Height-198', + 'zAsset-Width-199', + 'zAddAssetAttr-Original Width-200', + 'zIntResou-UnOriented Width-201', + 'zAsset-Thumbnail Index-202', + 'zAddAssetAttr-Embedded Thumbnail Height-203', + 'zAddAssetAttr-Embedded Thumbnail Length-204', + 'zAddAssetAttr-Embedded Thumbnail Offset-205', + 'zAddAssetAttr-Embedded Thumbnail Width-206', + 'zAsset-Packed Acceptable Crop Rect-207', + 'zAsset-Packed Badge Attributes-208', + 'zAsset-Packed Preferred Crop Rect-209', + 'zAsset-Curation Score-210', + 'zAsset-Camera Processing Adjustment State-211', + 'zAsset-Depth Type-212', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', + 'zAddAssetAttr-Orig Resource Choice-214', + 'zAsset-Spatial Type-215', + 'zAddAssetAttr-Spatial Over Capture Group ID-216', + 'zAddAssetAttr-Place Annotation Data-217', + 'zAddAssetAttr-Distance Identity-HEX-218', + 'zAddAssetAttr-Edited IPTC Attributes-219', + 'zAddAssetAttr-Title-Comments via Cloud Website-220', + 'zAddAssetAttr-Accessibility Description-221', + 'zAddAssetAttr-Photo Stream Tag ID-222', + 'zAddAssetAttr-Share Type-223', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', + 'zAsset-Overall Aesthetic Score-225', + 'zAsset-zENT-226', + 'zAsset-zOPT-227', + 'zAsset-Master= zCldMast-zPK-228', + 'zAsset-Extended Attributes= zExtAttr-zPK-229', + 'zAsset-Import Session Key-230', + 'zAsset-Photo Analysis Attributes Key-231', + 'zAsset-FOK-Cloud Feed Asset Entry Key-232', + 'zAsset-Computed Attributes Asset Key-233', + 'zAsset-Promotion Score-234', + 'zAsset-Iconic Score-235', + 'zAsset-Media Analysis Attributes Key-236', + 'zAsset-Media Group UUID-237', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', + 'zAsset.Cloud Collection GUID-239', + 'zAddAssetAttr-zENT-240', + 'ZAddAssetAttr-zOPT-241', + 'zAddAssetAttr-zAsset= zAsset_zPK-242', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', + 'zAddAssetAttr-Public Global UUID-245', + 'zAddAssetAttr-Original Assets UUID-246', + 'zAddAssetAttr-Originating Asset Identifier-247', + 'zAddAssetAttr.Adjusted Fingerprint-248', 'zCldMast-zPK= zAsset-Master-249', 'zCldMast-zENT-250', 'zCldMast-zOPT-251', @@ -10215,7 +11464,7 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found, "Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -11476,8 +12725,1254 @@ def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, tim return data_headers, data_list, source_path + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart- datetime', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability-4QueryStart', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability-4QueryStart', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type-4QueryStart', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type-4QueryStart', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID-4QueryStart', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 1 THEN '1-GenPlayground_or_3rdPrty_GenAI-1' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date- datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll- datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created- datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date- datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created- datetime', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date- datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date- datetime', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date- datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date- datetime', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date- datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date- datetime', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr-View_Presentation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date- datetime', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date- datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp- datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date- datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date- datetime', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp- datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date- datetime', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp- datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300])) + + data_headers = (('zAsset-Date Created-4QueryStart- datetime-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-4', + 'zIntResou-Fingerprint-5', + 'zAddAssetAttr.Adjusted Stable Hash-6', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-7', + 'zIntResou-Stable Hash-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-28', + 'zExtAttr-Credit-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date- datetime-48', 'datetime'), + ('zAsset- SortToken -CameraRoll- datetime-49', 'datetime'), + 'zAddAssetAttr-Date Created Source-50', + ('zAsset-Date Created- datetime-51', 'datetime'), + ('zCldMast-Creation Date- datetime-52', 'datetime'), + ('zIntResou-CldMst Date Created- datetime-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date- datetime-58', 'datetime'), + ('zAsset-Last Shared Date- datetime-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date- datetime-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date- datetime-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date- datetime-66', 'datetime'), + ('zAsset-Cloud Server Publish Date- datetime-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zIntResou-Local Availability-108', + 'zIntResou-Local Availability Target-109', + 'zIntResou-Cloud Local State-110', + 'zIntResou-Remote Availability-111', + 'zIntResou-Remote Availability Target-112', + 'zIntResou-Side Car Index-113', + 'zIntResou- File ID-114', + 'zIntResou-Version-115', + 'zAddAssetAttr- Original-File-Size-116', + 'zIntResou-Resource Type-117', + 'zIntResou-Datastore Sub-Type-118', + 'zIntResou-Cloud Source Type-119', + 'zIntResou-Data Length-120', + 'zIntResou-Recipe ID-121', + ('zIntResou-Cloud Last Prefetch Date- datetime-122', 'datetime'), + 'zIntResou-Cloud Prefetch Count-123', + ('zIntResou- Cloud-Last-OnDemand Download-Date- datetime-124', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-125', + 'zIntResou-Compact-UTI-126', + 'zAsset-Uniform Type ID-127', + 'zAsset-Original Color Space-128', + 'zCldMast-Uniform_Type_ID-129', + 'zCldMast-Full Size JPEG Source-130', + 'zAsset-HDR Gain-131', + 'zAsset-zHDR_Type-132', + 'zExtAttr-Codec-133', + 'zIntResou-Codec Four Char Code Name-134', + 'zCldMast-Codec Name-135', + 'zCldMast-Video Frame Rate-136', + 'zCldMast-Placeholder State-137', + 'zAsset-Depth_Type-138', + 'zAsset-Avalanche UUID-139', + 'zAsset-Avalanche_Kind-140', + 'zAsset-Avalanche_Pick_Type-BurstAsset-141', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-142', + 'zAddAssetAttr-Cloud Recovery State-143', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-144', + 'zAsset-Deferred Processing Needed-145', + 'zAsset-Video Deferred Processing Needed-146', + 'zAddAssetAttr-Deferred Photo Identifier-147', + 'zAddAssetAttr-Deferred Processing Candidate Options-148', + 'zAsset-Adjustments_State-149', + ('zAsset-Adjustment Timestamp- datetime-150', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime-151', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-152', + 'zAddAssetAttr-Montage-153', + 'zCompSyncAttr-Local_Analysis_Major_Version-154', + 'zAsset-Favorite-155', + 'zAsset-Hidden-156', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-157', + ('zAsset-Trashed Date- datetime-158', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-159', + 'zAsset-Delete-Reason-160', + 'zIntResou-Trash State-161', + ('zIntResou-Trashed Date- datetime-162', 'datetime'), + 'zAsset-Cloud Delete State-163', + 'zIntResou-Cloud Delete State-164', + 'zAddAssetAttr-PTP Trashed State-165', + 'zIntResou-PTP Trashed State-166', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-167', + ('zMedAnlyAstAttr-Media Analysis Timestamp- datetime-168', 'datetime'), + ('zAsset-Analysis State Modification Date- datetime-169', 'datetime'), + 'zAddAssetAttr- Pending View Count-170', + 'zAddAssetAttr- View Count-171', + 'zAddAssetAttr- Pending Play Count-172', + 'zAddAssetAttr- Play Count-173', + 'zAddAssetAttr- Pending Share Count-174', + 'zAddAssetAttr- Share Count-175', + 'zAddAssetAttr-Allowed for Analysis-176', + 'zAddAssetAttr-Scene Analysis Version-177', + 'zAddAssetAttr-Scene Analysis is From Preview-178', + ('zAddAssetAttr-Scene Analysis Timestamp- datetime-179', 'datetime'), + 'zAsset-Duplication Asset Visibility State-180', + 'zAddAssetAttr-Destination Asset Copy State-181', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-182', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-183', + 'zCldMast-Source Master For Duplication Scope ID-184', + 'zAddAssetAttr-Source Asset For Duplication ID-185', + 'zCldMast-Source Master for Duplication ID-186', + 'zAddAssetAttr-Variation Suggestions States-187', + 'zAsset-High Frame Rate State-188', + 'zAsset-Video Key Frame Time Scale-189', + 'zAsset-Video Key Frame Value-190', + 'zAsset-Current_Sleet_Cast-191', + 'zAddAssetAttr.Sleet_Is_Reversible-192', + 'zExtAttr-Sleet_Rendering_Version-193', + 'zExtAttr-Sleet_Intensity-194', + 'zExtAttr-Sleet_Tone_Bias-195', + 'zExtAttr-Sleet_Color_Bias-196', + 'zExtAttr-Sleet_Cast-197', + 'zExtAttr-ISO-198', + 'zExtAttr-Metering Mode-199', + 'zExtAttr-Sample Rate-200', + 'zExtAttr-Track Format-201', + 'zExtAttr-White Balance-202', + 'zExtAttr-Aperture-203', + 'zExtAttr-BitRate-204', + 'zExtAttr-Exposure Bias-205', + 'zExtAttr-Frames Per Second-206', + 'zExtAttr-Shutter Speed-207', + 'zExtAttr-Slush Scene Bias-208', + 'zExtAttr-Slush Version-209', + 'zExtAttr-Slush Preset-210', + 'zExtAttr-Slush Warm Bias-211', + 'zAsset-Height-212', + 'zAddAssetAttr-Original Height-213', + 'zIntResou-UnOriented Height-214', + 'zAsset-Width-215', + 'zAddAssetAttr-Original Width-216', + 'zIntResou-UnOriented Width-217', + 'zAsset-Thumbnail Index-218', + 'zAddAssetAttr-Embedded Thumbnail Height-219', + 'zAddAssetAttr-Embedded Thumbnail Length-220', + 'zAddAssetAttr-Embedded Thumbnail Offset-221', + 'zAddAssetAttr-Embedded Thumbnail Width-222', + 'zAsset-Packed Acceptable Crop Rect-223', + 'zAsset-Packed Badge Attributes-224', + 'zAsset-Packed Preferred Crop Rect-225', + 'zAsset-Curation Score-226', + 'zAsset-Camera Processing Adjustment State-227', + 'zAsset-Depth Type-228', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-229', + 'zAddAssetAttr-Orig Resource Choice-230', + 'zAsset-Spatial Type-231', + 'zAddAssetAttr-Spatial Over Capture Group ID-232', + 'zAddAssetAttr-Place Annotation Data-233', + 'zAddAssetAttr-Distance Identity-HEX-234', + 'zAddAssetAttr-Edited IPTC Attributes-235', + 'zAddAssetAttr-Title-Comments via Cloud Website-236', + 'zAddAssetAttr-Accessibility Description-237', + 'zAddAssetAttr-Photo Stream Tag ID-238', + 'zAddAssetAttr-Share Type-239', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-240', + 'zAsset-Overall Aesthetic Score-241', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-242', + 'zMedAnlyAstAttr-Image_Caption_Version-243', + 'zMedAnlyAstAttr-Video_Caption_Version-244', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-245', + 'zAsset-zENT-246', + 'zAsset-zOPT-247', + 'zAsset-Master= zCldMast-zPK-248', + 'zAsset-Extended Attributes= zExtAttr-zPK-249', + 'zAsset-Import Session Key-250', + 'zAsset-Photo Analysis Attributes Key-251', + 'zAsset-FOK-Cloud Feed Asset Entry Key-252', + 'zAsset-Computed Attributes Asset Key-253', + 'zAsset-Promotion Score-254', + 'zAsset-Iconic Score-255', + 'zAsset-Media Analysis Attributes Key-256', + 'zAsset-Media Group UUID-257', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-258', + 'zAsset.Cloud Collection GUID-259', + 'zAddAssetAttr-zENT-260', + 'ZAddAssetAttr-zOPT-261', + 'zAddAssetAttr-zAsset= zAsset_zPK-262', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-263', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-264', + 'zAddAssetAttr-Public Global UUID-265', + 'zAddAssetAttr-Original Assets UUID-266', + 'zAddAssetAttr-Originating Asset Identifier-267', + 'zCldMast-zPK= zAsset-Master-268', + 'zCldMast-zENT-269', + 'zCldMast-zOPT-270', + 'zCldMast-Moment Share Key= zShare-zPK-271', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-272', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-273', + 'zCldMast-Originating Asset ID-274', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-275', + 'CMzCldMastMedData-zENT-276', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-277', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-278', + 'AAAzCldMastMedData-zENT-279', + 'AAAzCldMastMedData-CldMast key-280', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-281', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-282', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-283', + 'zCompSyncAttr-zAsset= zAsset-zPK-284', + 'zCompSyncAttr-zENT-285', + 'zCompSyncAttr-zOPT-286', + 'zCompSyncAttr-Local_Analysis_Stage-287', + 'zCompSyncAttr-Cloud_Compute_State_Version-288', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-289', + 'zExtAttr-zENT-290', + 'zExtAttr-zOPT-291', + 'zExtAttr-Asset Key-292', + 'zIntResou-zPK-293', + 'zIntResou-zENT-294', + 'zIntResou-zOPT-295', + 'zIntResou-Asset= zAsset_zPK-296', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-297', + 'zMedAnlyAstAttr-zEnt-298', + 'zMedAnlyAstAttr-zOpt-299', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-300') + + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + @artifact_processor -def Ph50_3AssetIntResouGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph050_3AssetIntResouGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -11487,10 +13982,10 @@ def Ph50_3AssetIntResouGenPlayPsql(files_found, report_folder, seeker, wrap_text if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite from iOS " + iosversion) return (), [], source_path - if version.parse(iosversion) >= version.parse("18"): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found, "Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -12749,4 +15244,1250 @@ def Ph50_3AssetIntResouGenPlayPsql(files_found, report_folder, seeker, wrap_text 'zMedAnlyAstAttr-Asset= zAsset-Zpk-303') data_list = get_sqlite_db_records(source_path, query) - return data_headers, data_list, source_path \ No newline at end of file + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart- datetime', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability-4QueryStart', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability-4QueryStart', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type-4QueryStart', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type-4QueryStart', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID-4QueryStart', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 1 THEN '1-GenPlayground_or_3rdPrty_GenAI-1' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date- datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll- datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created- datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date- datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created- datetime', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date- datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date- datetime', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date- datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date- datetime', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date- datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date- datetime', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr-View_Presentation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date- datetime', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date- datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp- datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date- datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date- datetime', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp- datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date- datetime', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp- datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300])) + + data_headers = (('zAsset-Date Created-4QueryStart- datetime-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-4', + 'zIntResou-Fingerprint-5', + 'zAddAssetAttr.Adjusted Stable Hash-6', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-7', + 'zIntResou-Stable Hash-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-28', + 'zExtAttr-Credit-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date- datetime-48', 'datetime'), + ('zAsset- SortToken -CameraRoll- datetime-49', 'datetime'), + 'zAddAssetAttr-Date Created Source-50', + ('zAsset-Date Created- datetime-51', 'datetime'), + ('zCldMast-Creation Date- datetime-52', 'datetime'), + ('zIntResou-CldMst Date Created- datetime-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date- datetime-58', 'datetime'), + ('zAsset-Last Shared Date- datetime-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date- datetime-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date- datetime-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date- datetime-66', 'datetime'), + ('zAsset-Cloud Server Publish Date- datetime-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zIntResou-Local Availability-108', + 'zIntResou-Local Availability Target-109', + 'zIntResou-Cloud Local State-110', + 'zIntResou-Remote Availability-111', + 'zIntResou-Remote Availability Target-112', + 'zIntResou-Side Car Index-113', + 'zIntResou- File ID-114', + 'zIntResou-Version-115', + 'zAddAssetAttr- Original-File-Size-116', + 'zIntResou-Resource Type-117', + 'zIntResou-Datastore Sub-Type-118', + 'zIntResou-Cloud Source Type-119', + 'zIntResou-Data Length-120', + 'zIntResou-Recipe ID-121', + ('zIntResou-Cloud Last Prefetch Date- datetime-122', 'datetime'), + 'zIntResou-Cloud Prefetch Count-123', + ('zIntResou- Cloud-Last-OnDemand Download-Date- datetime-124', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-125', + 'zIntResou-Compact-UTI-126', + 'zAsset-Uniform Type ID-127', + 'zAsset-Original Color Space-128', + 'zCldMast-Uniform_Type_ID-129', + 'zCldMast-Full Size JPEG Source-130', + 'zAsset-HDR Gain-131', + 'zAsset-zHDR_Type-132', + 'zExtAttr-Codec-133', + 'zIntResou-Codec Four Char Code Name-134', + 'zCldMast-Codec Name-135', + 'zCldMast-Video Frame Rate-136', + 'zCldMast-Placeholder State-137', + 'zAsset-Depth_Type-138', + 'zAsset-Avalanche UUID-139', + 'zAsset-Avalanche_Kind-140', + 'zAsset-Avalanche_Pick_Type-BurstAsset-141', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-142', + 'zAddAssetAttr-Cloud Recovery State-143', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-144', + 'zAsset-Deferred Processing Needed-145', + 'zAsset-Video Deferred Processing Needed-146', + 'zAddAssetAttr-Deferred Photo Identifier-147', + 'zAddAssetAttr-Deferred Processing Candidate Options-148', + 'zAsset-Adjustments_State-149', + ('zAsset-Adjustment Timestamp- datetime-150', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime-151', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-152', + 'zAddAssetAttr-Montage-153', + 'zCompSyncAttr-Local_Analysis_Major_Version-154', + 'zAsset-Favorite-155', + 'zAsset-Hidden-156', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-157', + ('zAsset-Trashed Date- datetime-158', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-159', + 'zAsset-Delete-Reason-160', + 'zIntResou-Trash State-161', + ('zIntResou-Trashed Date- datetime-162', 'datetime'), + 'zAsset-Cloud Delete State-163', + 'zIntResou-Cloud Delete State-164', + 'zAddAssetAttr-PTP Trashed State-165', + 'zIntResou-PTP Trashed State-166', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-167', + ('zMedAnlyAstAttr-Media Analysis Timestamp- datetime-168', 'datetime'), + ('zAsset-Analysis State Modification Date- datetime-169', 'datetime'), + 'zAddAssetAttr- Pending View Count-170', + 'zAddAssetAttr- View Count-171', + 'zAddAssetAttr- Pending Play Count-172', + 'zAddAssetAttr- Play Count-173', + 'zAddAssetAttr- Pending Share Count-174', + 'zAddAssetAttr- Share Count-175', + 'zAddAssetAttr-Allowed for Analysis-176', + 'zAddAssetAttr-Scene Analysis Version-177', + 'zAddAssetAttr-Scene Analysis is From Preview-178', + ('zAddAssetAttr-Scene Analysis Timestamp- datetime-179', 'datetime'), + 'zAsset-Duplication Asset Visibility State-180', + 'zAddAssetAttr-Destination Asset Copy State-181', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-182', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-183', + 'zCldMast-Source Master For Duplication Scope ID-184', + 'zAddAssetAttr-Source Asset For Duplication ID-185', + 'zCldMast-Source Master for Duplication ID-186', + 'zAddAssetAttr-Variation Suggestions States-187', + 'zAsset-High Frame Rate State-188', + 'zAsset-Video Key Frame Time Scale-189', + 'zAsset-Video Key Frame Value-190', + 'zAsset-Current_Sleet_Cast-191', + 'zAddAssetAttr.Sleet_Is_Reversible-192', + 'zExtAttr-Sleet_Rendering_Version-193', + 'zExtAttr-Sleet_Intensity-194', + 'zExtAttr-Sleet_Tone_Bias-195', + 'zExtAttr-Sleet_Color_Bias-196', + 'zExtAttr-Sleet_Cast-197', + 'zExtAttr-ISO-198', + 'zExtAttr-Metering Mode-199', + 'zExtAttr-Sample Rate-200', + 'zExtAttr-Track Format-201', + 'zExtAttr-White Balance-202', + 'zExtAttr-Aperture-203', + 'zExtAttr-BitRate-204', + 'zExtAttr-Exposure Bias-205', + 'zExtAttr-Frames Per Second-206', + 'zExtAttr-Shutter Speed-207', + 'zExtAttr-Slush Scene Bias-208', + 'zExtAttr-Slush Version-209', + 'zExtAttr-Slush Preset-210', + 'zExtAttr-Slush Warm Bias-211', + 'zAsset-Height-212', + 'zAddAssetAttr-Original Height-213', + 'zIntResou-UnOriented Height-214', + 'zAsset-Width-215', + 'zAddAssetAttr-Original Width-216', + 'zIntResou-UnOriented Width-217', + 'zAsset-Thumbnail Index-218', + 'zAddAssetAttr-Embedded Thumbnail Height-219', + 'zAddAssetAttr-Embedded Thumbnail Length-220', + 'zAddAssetAttr-Embedded Thumbnail Offset-221', + 'zAddAssetAttr-Embedded Thumbnail Width-222', + 'zAsset-Packed Acceptable Crop Rect-223', + 'zAsset-Packed Badge Attributes-224', + 'zAsset-Packed Preferred Crop Rect-225', + 'zAsset-Curation Score-226', + 'zAsset-Camera Processing Adjustment State-227', + 'zAsset-Depth Type-228', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-229', + 'zAddAssetAttr-Orig Resource Choice-230', + 'zAsset-Spatial Type-231', + 'zAddAssetAttr-Spatial Over Capture Group ID-232', + 'zAddAssetAttr-Place Annotation Data-233', + 'zAddAssetAttr-Distance Identity-HEX-234', + 'zAddAssetAttr-Edited IPTC Attributes-235', + 'zAddAssetAttr-Title-Comments via Cloud Website-236', + 'zAddAssetAttr-Accessibility Description-237', + 'zAddAssetAttr-Photo Stream Tag ID-238', + 'zAddAssetAttr-Share Type-239', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-240', + 'zAsset-Overall Aesthetic Score-241', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-242', + 'zMedAnlyAstAttr-Image_Caption_Version-243', + 'zMedAnlyAstAttr-Video_Caption_Version-244', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-245', + 'zAsset-zENT-246', + 'zAsset-zOPT-247', + 'zAsset-Master= zCldMast-zPK-248', + 'zAsset-Extended Attributes= zExtAttr-zPK-249', + 'zAsset-Import Session Key-250', + 'zAsset-Photo Analysis Attributes Key-251', + 'zAsset-FOK-Cloud Feed Asset Entry Key-252', + 'zAsset-Computed Attributes Asset Key-253', + 'zAsset-Promotion Score-254', + 'zAsset-Iconic Score-255', + 'zAsset-Media Analysis Attributes Key-256', + 'zAsset-Media Group UUID-257', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-258', + 'zAsset.Cloud Collection GUID-259', + 'zAddAssetAttr-zENT-260', + 'ZAddAssetAttr-zOPT-261', + 'zAddAssetAttr-zAsset= zAsset_zPK-262', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-263', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-264', + 'zAddAssetAttr-Public Global UUID-265', + 'zAddAssetAttr-Original Assets UUID-266', + 'zAddAssetAttr-Originating Asset Identifier-267', + 'zCldMast-zPK= zAsset-Master-268', + 'zCldMast-zENT-269', + 'zCldMast-zOPT-270', + 'zCldMast-Moment Share Key= zShare-zPK-271', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-272', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-273', + 'zCldMast-Originating Asset ID-274', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-275', + 'CMzCldMastMedData-zENT-276', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-277', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-278', + 'AAAzCldMastMedData-zENT-279', + 'AAAzCldMastMedData-CldMast key-280', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-281', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-282', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-283', + 'zCompSyncAttr-zAsset= zAsset-zPK-284', + 'zCompSyncAttr-zENT-285', + 'zCompSyncAttr-zOPT-286', + 'zCompSyncAttr-Local_Analysis_Stage-287', + 'zCompSyncAttr-Cloud_Compute_State_Version-288', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-289', + 'zExtAttr-zENT-290', + 'zExtAttr-zOPT-291', + 'zExtAttr-Asset Key-292', + 'zIntResou-zPK-293', + 'zIntResou-zENT-294', + 'zIntResou-zOPT-295', + 'zIntResou-Asset= zAsset_zPK-296', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-297', + 'zMedAnlyAstAttr-zEnt-298', + 'zMedAnlyAstAttr-zOpt-299', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-300') + + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py b/scripts/artifacts/Ph051PossOptimizedAssetsIntResouData.py similarity index 80% rename from scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py rename to scripts/artifacts/Ph051PossOptimizedAssetsIntResouData.py index ebe40c7a4..cfea71d0c 100644 --- a/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py +++ b/scripts/artifacts/Ph051PossOptimizedAssetsIntResouData.py @@ -1,18 +1,19 @@ __artifacts_v2__ = { - 'Ph51PossibleOptimizedAssetsIntResouPhDaPsql': { - 'name': 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', + 'Ph051PossibleOptimizedAssetsIntResouPhDaPsql': { + 'name': 'Ph051-Possible_Optimized_Assets_IntResou-PhDaPsql', 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' ' and other tables. This and other related parsers should provide data for investigative' ' analysis of assets being stored locally on the device verses assets being stored in' ' iCloud Photos as the result of optimization. This is very large query and script,' ' I recommend opening the TSV generated report with Zimmermans Tools' ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results.', + ' and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', - 'version': '5.0', - 'date': '2025-01-05', + 'version': '6.0', + 'date': '2026-05-26', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization', + 'category': 'Photos.sqlite-Assets-OptimizedforStorage-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -25,7 +26,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph51PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph051PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -35,7 +36,7 @@ def Ph51PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seek if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("13.7"): + if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): @@ -4409,7 +4410,7 @@ def Ph51PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seek return data_headers, data_list, source_path - elif version.parse(iosversion) >= version.parse("18"): + elif (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found, "Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -5670,3 +5671,1251 @@ def Ph51PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seek data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart- datetime', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability-4QueryStart', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability-4QueryStart', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type-4QueryStart', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type-4QueryStart', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID-4QueryStart', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 1 THEN '1-GenPlayground_or_3rdPrty_GenAI-1' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date- datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll- datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created- datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date- datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created- datetime', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date- datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date- datetime', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date- datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date- datetime', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date- datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date- datetime', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr-View_Presentation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date- datetime', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date- datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp- datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date- datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date- datetime', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp- datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date- datetime', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp- datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300])) + + data_headers = (('zAsset-Date Created-4QueryStart- datetime-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-4', + 'zIntResou-Fingerprint-5', + 'zAddAssetAttr.Adjusted Stable Hash-6', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-7', + 'zIntResou-Stable Hash-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-28', + 'zExtAttr-Credit-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date- datetime-48', 'datetime'), + ('zAsset- SortToken -CameraRoll- datetime-49', 'datetime'), + 'zAddAssetAttr-Date Created Source-50', + ('zAsset-Date Created- datetime-51', 'datetime'), + ('zCldMast-Creation Date- datetime-52', 'datetime'), + ('zIntResou-CldMst Date Created- datetime-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date- datetime-58', 'datetime'), + ('zAsset-Last Shared Date- datetime-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date- datetime-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files- datetime-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date- datetime-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date- datetime-66', 'datetime'), + ('zAsset-Cloud Server Publish Date- datetime-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zIntResou-Local Availability-108', + 'zIntResou-Local Availability Target-109', + 'zIntResou-Cloud Local State-110', + 'zIntResou-Remote Availability-111', + 'zIntResou-Remote Availability Target-112', + 'zIntResou-Side Car Index-113', + 'zIntResou- File ID-114', + 'zIntResou-Version-115', + 'zAddAssetAttr- Original-File-Size-116', + 'zIntResou-Resource Type-117', + 'zIntResou-Datastore Sub-Type-118', + 'zIntResou-Cloud Source Type-119', + 'zIntResou-Data Length-120', + 'zIntResou-Recipe ID-121', + ('zIntResou-Cloud Last Prefetch Date- datetime-122', 'datetime'), + 'zIntResou-Cloud Prefetch Count-123', + ('zIntResou- Cloud-Last-OnDemand Download-Date- datetime-124', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-125', + 'zIntResou-Compact-UTI-126', + 'zAsset-Uniform Type ID-127', + 'zAsset-Original Color Space-128', + 'zCldMast-Uniform_Type_ID-129', + 'zCldMast-Full Size JPEG Source-130', + 'zAsset-HDR Gain-131', + 'zAsset-zHDR_Type-132', + 'zExtAttr-Codec-133', + 'zIntResou-Codec Four Char Code Name-134', + 'zCldMast-Codec Name-135', + 'zCldMast-Video Frame Rate-136', + 'zCldMast-Placeholder State-137', + 'zAsset-Depth_Type-138', + 'zAsset-Avalanche UUID-139', + 'zAsset-Avalanche_Kind-140', + 'zAsset-Avalanche_Pick_Type-BurstAsset-141', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-142', + 'zAddAssetAttr-Cloud Recovery State-143', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-144', + 'zAsset-Deferred Processing Needed-145', + 'zAsset-Video Deferred Processing Needed-146', + 'zAddAssetAttr-Deferred Photo Identifier-147', + 'zAddAssetAttr-Deferred Processing Candidate Options-148', + 'zAsset-Adjustments_State-149', + ('zAsset-Adjustment Timestamp- datetime-150', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date- datetime-151', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-152', + 'zAddAssetAttr-Montage-153', + 'zCompSyncAttr-Local_Analysis_Major_Version-154', + 'zAsset-Favorite-155', + 'zAsset-Hidden-156', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-157', + ('zAsset-Trashed Date- datetime-158', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-159', + 'zAsset-Delete-Reason-160', + 'zIntResou-Trash State-161', + ('zIntResou-Trashed Date- datetime-162', 'datetime'), + 'zAsset-Cloud Delete State-163', + 'zIntResou-Cloud Delete State-164', + 'zAddAssetAttr-PTP Trashed State-165', + 'zIntResou-PTP Trashed State-166', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-167', + ('zMedAnlyAstAttr-Media Analysis Timestamp- datetime-168', 'datetime'), + ('zAsset-Analysis State Modification Date- datetime-169', 'datetime'), + 'zAddAssetAttr- Pending View Count-170', + 'zAddAssetAttr- View Count-171', + 'zAddAssetAttr- Pending Play Count-172', + 'zAddAssetAttr- Play Count-173', + 'zAddAssetAttr- Pending Share Count-174', + 'zAddAssetAttr- Share Count-175', + 'zAddAssetAttr-Allowed for Analysis-176', + 'zAddAssetAttr-Scene Analysis Version-177', + 'zAddAssetAttr-Scene Analysis is From Preview-178', + ('zAddAssetAttr-Scene Analysis Timestamp- datetime-179', 'datetime'), + 'zAsset-Duplication Asset Visibility State-180', + 'zAddAssetAttr-Destination Asset Copy State-181', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-182', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-183', + 'zCldMast-Source Master For Duplication Scope ID-184', + 'zAddAssetAttr-Source Asset For Duplication ID-185', + 'zCldMast-Source Master for Duplication ID-186', + 'zAddAssetAttr-Variation Suggestions States-187', + 'zAsset-High Frame Rate State-188', + 'zAsset-Video Key Frame Time Scale-189', + 'zAsset-Video Key Frame Value-190', + 'zAsset-Current_Sleet_Cast-191', + 'zAddAssetAttr.Sleet_Is_Reversible-192', + 'zExtAttr-Sleet_Rendering_Version-193', + 'zExtAttr-Sleet_Intensity-194', + 'zExtAttr-Sleet_Tone_Bias-195', + 'zExtAttr-Sleet_Color_Bias-196', + 'zExtAttr-Sleet_Cast-197', + 'zExtAttr-ISO-198', + 'zExtAttr-Metering Mode-199', + 'zExtAttr-Sample Rate-200', + 'zExtAttr-Track Format-201', + 'zExtAttr-White Balance-202', + 'zExtAttr-Aperture-203', + 'zExtAttr-BitRate-204', + 'zExtAttr-Exposure Bias-205', + 'zExtAttr-Frames Per Second-206', + 'zExtAttr-Shutter Speed-207', + 'zExtAttr-Slush Scene Bias-208', + 'zExtAttr-Slush Version-209', + 'zExtAttr-Slush Preset-210', + 'zExtAttr-Slush Warm Bias-211', + 'zAsset-Height-212', + 'zAddAssetAttr-Original Height-213', + 'zIntResou-UnOriented Height-214', + 'zAsset-Width-215', + 'zAddAssetAttr-Original Width-216', + 'zIntResou-UnOriented Width-217', + 'zAsset-Thumbnail Index-218', + 'zAddAssetAttr-Embedded Thumbnail Height-219', + 'zAddAssetAttr-Embedded Thumbnail Length-220', + 'zAddAssetAttr-Embedded Thumbnail Offset-221', + 'zAddAssetAttr-Embedded Thumbnail Width-222', + 'zAsset-Packed Acceptable Crop Rect-223', + 'zAsset-Packed Badge Attributes-224', + 'zAsset-Packed Preferred Crop Rect-225', + 'zAsset-Curation Score-226', + 'zAsset-Camera Processing Adjustment State-227', + 'zAsset-Depth Type-228', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-229', + 'zAddAssetAttr-Orig Resource Choice-230', + 'zAsset-Spatial Type-231', + 'zAddAssetAttr-Spatial Over Capture Group ID-232', + 'zAddAssetAttr-Place Annotation Data-233', + 'zAddAssetAttr-Distance Identity-HEX-234', + 'zAddAssetAttr-Edited IPTC Attributes-235', + 'zAddAssetAttr-Title-Comments via Cloud Website-236', + 'zAddAssetAttr-Accessibility Description-237', + 'zAddAssetAttr-Photo Stream Tag ID-238', + 'zAddAssetAttr-Share Type-239', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-240', + 'zAsset-Overall Aesthetic Score-241', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-242', + 'zMedAnlyAstAttr-Image_Caption_Version-243', + 'zMedAnlyAstAttr-Video_Caption_Version-244', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-245', + 'zAsset-zENT-246', + 'zAsset-zOPT-247', + 'zAsset-Master= zCldMast-zPK-248', + 'zAsset-Extended Attributes= zExtAttr-zPK-249', + 'zAsset-Import Session Key-250', + 'zAsset-Photo Analysis Attributes Key-251', + 'zAsset-FOK-Cloud Feed Asset Entry Key-252', + 'zAsset-Computed Attributes Asset Key-253', + 'zAsset-Promotion Score-254', + 'zAsset-Iconic Score-255', + 'zAsset-Media Analysis Attributes Key-256', + 'zAsset-Media Group UUID-257', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-258', + 'zAsset.Cloud Collection GUID-259', + 'zAddAssetAttr-zENT-260', + 'ZAddAssetAttr-zOPT-261', + 'zAddAssetAttr-zAsset= zAsset_zPK-262', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-263', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-264', + 'zAddAssetAttr-Public Global UUID-265', + 'zAddAssetAttr-Original Assets UUID-266', + 'zAddAssetAttr-Originating Asset Identifier-267', + 'zCldMast-zPK= zAsset-Master-268', + 'zCldMast-zENT-269', + 'zCldMast-zOPT-270', + 'zCldMast-Moment Share Key= zShare-zPK-271', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-272', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-273', + 'zCldMast-Originating Asset ID-274', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-275', + 'CMzCldMastMedData-zENT-276', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-277', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-278', + 'AAAzCldMastMedData-zENT-279', + 'AAAzCldMastMedData-CldMast key-280', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-281', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-282', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-283', + 'zCompSyncAttr-zAsset= zAsset-zPK-284', + 'zCompSyncAttr-zENT-285', + 'zCompSyncAttr-zOPT-286', + 'zCompSyncAttr-Local_Analysis_Stage-287', + 'zCompSyncAttr-Cloud_Compute_State_Version-288', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-289', + 'zExtAttr-zENT-290', + 'zExtAttr-zOPT-291', + 'zExtAttr-Asset Key-292', + 'zIntResou-zPK-293', + 'zIntResou-zENT-294', + 'zIntResou-zOPT-295', + 'zIntResou-Asset= zAsset_zPK-296', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-297', + 'zMedAnlyAstAttr-zEnt-298', + 'zMedAnlyAstAttr-zOpt-299', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-300') + + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + \ No newline at end of file diff --git a/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py b/scripts/artifacts/Ph080comappleMobileSlideShowPlist.py similarity index 86% rename from scripts/artifacts/Ph80comappleMobileSlideShowPlist.py rename to scripts/artifacts/Ph080comappleMobileSlideShowPlist.py index 9359b91f5..5155956b5 100644 --- a/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py +++ b/scripts/artifacts/Ph080comappleMobileSlideShowPlist.py @@ -1,15 +1,15 @@ __artifacts_v2__ = { - 'Ph80ComAppleMobileSlideshowPlist': { - 'name': 'Ph80-Com-Apple-MobileSlideshow-Plist', + 'Ph080ComAppleMobileSlideshowPlist': { + 'name': 'Ph080-Com-Apple-MobileSlideshow-Plist', 'description': 'Parses basic data from com.apple.mobileslideshow.plist which contains some important' ' data related to the Apple Photos Application. Additional information and explanation of some' - ' keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', + ' keys-fields might be found with research and published blogs written by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains com.apple.mobileslideshow.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-MobileSlideShow', 'notes': '', 'paths': ('*/Library/Preferences/com.apple.mobileslideshow.plist',), "output_types": ["standard", "tsv", "none"], @@ -24,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph80ComAppleMobileSlideshowPlist(files_found, report_folder, seeker, wrap_text, time_offset): +def Ph080ComAppleMobileSlideshowPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph81comappleCameraPlist.py b/scripts/artifacts/Ph081comappleCameraPlist.py similarity index 92% rename from scripts/artifacts/Ph81comappleCameraPlist.py rename to scripts/artifacts/Ph081comappleCameraPlist.py index 54c63ac5e..c83f37893 100644 --- a/scripts/artifacts/Ph81comappleCameraPlist.py +++ b/scripts/artifacts/Ph081comappleCameraPlist.py @@ -1,15 +1,15 @@ __artifacts_v2__ = { - 'Ph81ComAppleCameraPlist': { - 'name': 'Ph81-Com-Apple-Camera-Plist', + 'Ph081ComAppleCameraPlist': { + 'name': 'Ph081-Com-Apple-Camera-Plist', 'description': 'Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some' ' important data related to the Apple Camera Application. Additional information and' - ' explanation of some keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', + ' explanation of some keys-fields might be found with research and published blogs by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains com.apple.camera.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-Camera', 'notes': '', 'paths': ('*/mobile/Library/Preferences/com.apple.camera.plist',), "output_types": ["standard", "tsv", "none"], @@ -24,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph81ComAppleCameraPlist(files_found, report_folder, seeker, wrap_text, time_offset): +def Ph081ComAppleCameraPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py b/scripts/artifacts/Ph082comappleMediaAnalysisDPlist.py similarity index 75% rename from scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py rename to scripts/artifacts/Ph082comappleMediaAnalysisDPlist.py index bffea3e37..84a36ac86 100644 --- a/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py +++ b/scripts/artifacts/Ph082comappleMediaAnalysisDPlist.py @@ -1,16 +1,16 @@ __artifacts_v2__ = { - 'Ph82ComAppleMediaAnalysisDPlist': { - 'name': 'Ph82-Com-Apple-MediaAnalysisD-Plist', + 'Ph082ComAppleMediaAnalysisDPlist': { + 'name': 'Ph082-Com-Apple-MediaAnalysisD-Plist', 'description': 'Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which' ' contains some important data related to Apple Photos Libraries storage locations and' ' Media Analysis Completion. Additional information and explanation of some keys-fields' - ' might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', + ' might be found with research and published blogs written by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains com.apple.mediaanalysisd.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-MediaAnalysis-PhotoLib-List', 'notes': '', 'paths': ('*/mobile/Library/Preferences/com.apple.mediaanalysisd.plist',), "output_types": ["standard", "tsv", "none"], @@ -25,7 +25,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph82ComAppleMediaAnalysisDPlist(files_found, report_folder, seeker, wrap_text, time_offset): +def Ph082ComAppleMediaAnalysisDPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py b/scripts/artifacts/Ph083comapplePurpleBuddyPlist.py similarity index 74% rename from scripts/artifacts/Ph83comapplePurpleBuddyPlist.py rename to scripts/artifacts/Ph083comapplePurpleBuddyPlist.py index 34a569319..787da3fda 100644 --- a/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py +++ b/scripts/artifacts/Ph083comapplePurpleBuddyPlist.py @@ -1,13 +1,14 @@ __artifacts_v2__ = { - 'Ph83ComApplePurpleBuddyPlist': { - 'name': 'Ph83-Com-Apple-PurpleBuddy-Plist', + 'Ph083ComApplePurpleBuddyPlist': { + 'name': 'Ph083-Com-Apple-PurpleBuddy-Plist', 'description': 'Parses basic data from com.apple.purplebuddy.plist which contains some important data' - ' related to device restore.', + ' related to device restore.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains com.apple.purplebuddy.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-PurpleBuddy', 'notes': '', 'paths': ('*/Library/Preferences/com.apple.purplebuddy.plist',), "output_types": ["standard", "tsv", "none"], @@ -22,7 +23,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph83ComApplePurpleBuddyPlist(files_found, report_folder, seeker, wrap_text, time_offset): +def Ph083ComApplePurpleBuddyPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py b/scripts/artifacts/Ph084CameraSmartSharingMetadataPlist.py similarity index 83% rename from scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py rename to scripts/artifacts/Ph084CameraSmartSharingMetadataPlist.py index 58468ad88..189a2dbac 100644 --- a/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py +++ b/scripts/artifacts/Ph084CameraSmartSharingMetadataPlist.py @@ -1,16 +1,16 @@ __artifacts_v2__ = { - 'Ph84CameraSmartSharingMetadataPlist': { - 'name': 'Ph84-Camera-Smart-Sharing-Metadata-Plist', + 'Ph084CameraSmartSharingMetadataPlist': { + 'name': 'Ph084-Camera-Smart-Sharing-Metadata-Plist', 'description': 'Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist' ' which contains some important data related to iCloud Shared Photos Library' - ' Smart Camera Settings and auto sharing. Additional information and' - ' explanation of some keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', + ' Smart Camera Settings and auto sharing. Additional information and explanation of some' + ' keys-fields might be found with research and published blogs written by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains camera_smart_sharing_metadata.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-Camera-Smart-Share', 'notes': '', 'paths': ('*/PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist',), "output_types": ["standard", "tsv", "none"], @@ -25,7 +25,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph84CameraSmartSharingMetadataPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph084CameraSmartSharingMetadataPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py b/scripts/artifacts/Ph085acntsdcloudServiceEnableLogplist.py similarity index 80% rename from scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py rename to scripts/artifacts/Ph085acntsdcloudServiceEnableLogplist.py index 9ac1bdbae..5bb4d9f3d 100644 --- a/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py +++ b/scripts/artifacts/Ph085acntsdcloudServiceEnableLogplist.py @@ -1,15 +1,15 @@ __artifacts_v2__ = { - 'Ph85accountsdcloudServiceEnableLogPlist': { - 'name': 'Ph85-accountsd-cloud-Service-Enable-Log-Plist', + 'Ph085accountsdcloudServiceEnableLogPlist': { + 'name': 'Ph085-accountsd-cloud-Service-Enable-Log-Plist', 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been' ' enabled. Based on research and published blogs written by Scott Koenig' - ' https://theforensicscooter.com/', + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains accountsd cloudServiceEnableLog.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-CPL-Service-Enabled', 'notes': '', 'paths': ('*/com.apple.accountsd/cloudServiceEnableLog.plist',), "output_types": ["standard", "tsv", "none"], @@ -24,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph85accountsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph085accountsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py b/scripts/artifacts/Ph086astsdcloudServiceEnableLogplist.py similarity index 79% rename from scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py rename to scripts/artifacts/Ph086astsdcloudServiceEnableLogplist.py index 3a4d5a25e..c42e63c29 100644 --- a/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py +++ b/scripts/artifacts/Ph086astsdcloudServiceEnableLogplist.py @@ -1,14 +1,15 @@ __artifacts_v2__ = { - 'Ph86assetsdcloudServiceEnableLogPlist': { - 'name': 'Ph86-assetsd-cloud-Service-Enable-Log-Plist', + 'Ph086assetsdcloudServiceEnableLogPlist': { + 'name': 'Ph086-assetsd-cloud-Service-Enable-Log-Plist', 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.' - ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/', + ' Based on research and published blogs written by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains assetsd cloudServiceEnableLog.plist', - 'category': 'Photos-Z-Settings', + 'category': 'Photos.sqlite-Y-Settings-Plist-CPL-Service-Enabled', 'notes': '', 'paths': ('*/com.apple.assetsd/cloudServiceEnableLog.plist',), "output_types": ["standard", "tsv", "none"], @@ -23,7 +24,7 @@ from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path @artifact_processor -def Ph86assetsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph086assetsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] source_path = str(files_found[0]) diff --git a/scripts/artifacts/Ph100UFEDdevcievaluesplist.py b/scripts/artifacts/Ph087UFEDdevcievaluesplist.py similarity index 69% rename from scripts/artifacts/Ph100UFEDdevcievaluesplist.py rename to scripts/artifacts/Ph087UFEDdevcievaluesplist.py index 39f6b6923..f5c3ff30b 100644 --- a/scripts/artifacts/Ph100UFEDdevcievaluesplist.py +++ b/scripts/artifacts/Ph087UFEDdevcievaluesplist.py @@ -1,24 +1,21 @@ -""" See artifact description below """ - __artifacts_v2__ = { - "ph_100_ufed_device_values_plist": { - "name": "Ph100-UFED-device-values-Plist", - "description": "Parses basic data from */device_values.plist which is a " - "part of a UFED Advance Logical acquisitions with " - "non-encrypted backups. The parsing of this file will " - "allow for iLEAPP to parse some basic information such " - "as */PhotoData/Photos.sqlite. " - "Based on research and published blogs written by " - "Scott Koenig https://theforensicscooter.com/", - "author": "Scott Koenig", - "creation_date": "2025-01-05", - "last_update_date": "2025-10-14", - "requirements": "Acquisition that contains device_values.plist", - "category": "Photos-Z-Settings", - "notes": "", - "paths": ("*/device_values.plist",), - "output_types": ["standard", "tsv", "none"], - "artifact_icon": "settings" + 'Ph087UFEDdevcievaluesplist': { + 'name': 'Ph087-UFED-device-values-Plist', + 'description': 'Parses basic data from */device_values.plist which is a part of a' + ' UFED Advance Logical acquisitions with non-encrypted backups.' + ' The parsing of this file will allow for iLEAPP to parse some basic' + ' information such as */PhotoData/Photos.sqlite. Based on research' + ' and published blogs written by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', + 'author': 'Scott Koenig', + 'version': '1.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains device_values.plist', + 'category': 'Photos.sqlite-Y-Settings-UFED-Device-Info', + 'notes': '', + 'paths': ('*/device_values.plist',), + "output_types": ["standard", "tsv", "none"], + "artifact_icon": "settings" } } @@ -27,7 +24,7 @@ @artifact_processor -def ph_100_ufed_device_values_plist(context): +def Ph087UFEDdevcievaluesplist(context): """ See artifact description """ data_source = context.get_source_file_path('device_values.plist') data_list = [] diff --git a/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py b/scripts/artifacts/Ph094Ios14REFforAssetAnalysis.py similarity index 99% rename from scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py rename to scripts/artifacts/Ph094Ios14REFforAssetAnalysis.py index 8becb23a4..45ce0dfa8 100644 --- a/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph094Ios14REFforAssetAnalysis.py @@ -1,33 +1,35 @@ __artifacts_v2__ = { - 'Ph94_1iOS14RefforAssetAnalysisPhDaPsql': { - 'name': 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql', + 'Ph094_1iOS14RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph094.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql', 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' ' set of decoded data based on testing and research conducted by Scott Koenig' ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', + ' to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS14-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph94_2iOS14RefforAssetAnalysisSyndPL': { - 'name': 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL', + 'Ph094_2iOS14RefforAssetAnalysisSyndPL': { + 'name': 'Ph094.2-iOS14_Ref_for_Asset_Analysis-SyndPL', 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' ' This parser includes the largest set of decoded data based on testing and research' ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', + ' TimelineExplorer to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS14-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -40,7 +42,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph94_1iOS14RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph094_1iOS14RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -4559,7 +4561,7 @@ def Ph94_1iOS14RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path @artifact_processor -def Ph94_2iOS14RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph094_2iOS14RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) diff --git a/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py b/scripts/artifacts/Ph095iOS15REFforAssetAnalysis.py similarity index 99% rename from scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py rename to scripts/artifacts/Ph095iOS15REFforAssetAnalysis.py index 7651f173a..e5f7a9d0b 100644 --- a/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph095iOS15REFforAssetAnalysis.py @@ -1,33 +1,35 @@ __artifacts_v2__ = { - 'Ph95_1iOS15RefforAssetAnalysisPhDaPsql': { - 'name': 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql', + 'Ph095_1iOS15RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph095.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql', 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' ' set of decoded data based on testing and research conducted by Scott Koenig' ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', + ' to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS15-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph95_2iOS15RefforAssetAnalysisSyndPL': { - 'name': 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL', + 'Ph095_2iOS15RefforAssetAnalysisSyndPL': { + 'name': 'Ph095.2-iOS15_Ref_for_Asset_Analysis-SyndPL', 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' ' This parser includes the largest set of decoded data based on testing and research' ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', + ' TimelineExplorer to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS15-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -40,7 +42,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph95_1iOS15RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph095_1iOS15RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -3107,7 +3109,7 @@ def Ph95_1iOS15RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path @artifact_processor -def Ph95_2iOS15RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph095_2iOS15RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) diff --git a/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py b/scripts/artifacts/Ph096iOS16REFforAssetAnalysis.py similarity index 99% rename from scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py rename to scripts/artifacts/Ph096iOS16REFforAssetAnalysis.py index 89ff37181..9cec8269d 100644 --- a/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph096iOS16REFforAssetAnalysis.py @@ -1,33 +1,35 @@ __artifacts_v2__ = { - 'Ph96_1iOS16RefforAssetAnalysisPhDaPsql': { - 'name': 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql', + 'Ph096_1iOS16RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph096.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql', 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' ' set of decoded data based on testing and research conducted by Scott Koenig' ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', + ' to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS16-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph96_2iOS16RefforAssetAnalysisSyndPL': { - 'name': 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL', + 'Ph096_2iOS16RefforAssetAnalysisSyndPL': { + 'name': 'Ph096.2-iOS16_Ref_for_Asset_Analysis-SyndPL', 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' ' This parser includes the largest set of decoded data based on testing and research' ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', + ' TimelineExplorer to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS16-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -40,7 +42,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph96_1iOS16RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph096_1iOS16RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -3883,7 +3885,7 @@ def Ph96_1iOS16RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path @artifact_processor -def Ph96_2iOS16RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph096_2iOS16RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) diff --git a/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py b/scripts/artifacts/Ph097iOS17REFforAssetAnalysis.py similarity index 99% rename from scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py rename to scripts/artifacts/Ph097iOS17REFforAssetAnalysis.py index 83a35244a..8f7b959b8 100644 --- a/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph097iOS17REFforAssetAnalysis.py @@ -1,33 +1,35 @@ __artifacts_v2__ = { - 'Ph97_1iOS17RefforAssetAnalysisPhDaPsql': { - 'name': 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql', + 'Ph097_1iOS17RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph097.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql', 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' ' set of decoded data based on testing and research conducted by Scott Koenig' ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', + ' to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS17-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph97_2iOS17RefforAssetAnalysisSyndPL': { - 'name': 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL', + 'Ph097_2iOS17RefforAssetAnalysisSyndPL': { + 'name': 'Ph097.2-iOS17_Ref_for_Asset_Analysis-SyndPL', 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' ' This parser includes the largest set of decoded data based on testing and research' ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', + ' TimelineExplorer to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS17-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -40,7 +42,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph97_1iOS17RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph097_1iOS17RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -7792,7 +7794,7 @@ def Ph97_1iOS17RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path @artifact_processor -def Ph97_2iOS17RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph097_2iOS17RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) diff --git a/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py b/scripts/artifacts/Ph098iOS18REFforAssetAnalysis.py similarity index 99% rename from scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py rename to scripts/artifacts/Ph098iOS18REFforAssetAnalysis.py index 53d95ff71..67c14fd4e 100644 --- a/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph098iOS18REFforAssetAnalysis.py @@ -1,50 +1,53 @@ __artifacts_v2__ = { - 'Ph98_1iOS18RefforAssetAnalysisPhDaPsql': { - 'name': 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql', + 'Ph098_1iOS18RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph098.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql', 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' ' set of decoded data based on testing and research conducted by Scott Koenig' ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', + ' to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS18-PhotoData-Psql', 'notes': '', 'paths': ('*/PhotoData/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph98_2iOS18RefforAssetAnalysisSyndPL': { - 'name': 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL', + 'Ph098_2iOS18RefforAssetAnalysisSyndPL': { + 'name': 'Ph098.2-iOS18_Ref_for_Asset_Analysis-SyndPL', 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' ' This parser includes the largest set of decoded data based on testing and research' ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', + ' TimelineExplorer to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '5.0', 'date': '2025-01-05', 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS18-SyndicationPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], "artifact_icon": "database" }, - 'Ph98_3iOS18RefforAssetAnalysisGenPlayPsql': { - 'name': 'Ph98.3-iOS18_Ref_for_Asset_Analysis-GenPlayPsql', + 'Ph098_3iOS18RefforAssetAnalysisGenPlayPsql': { + 'name': 'Ph098.3-iOS18_Ref_for_Asset_Analysis-GenPlayPsql', 'description': 'Parses asset records from GenPlay-Photos.sqlite. This parser includes the largest' ' set of decoded data based on testing and research conducted by Scott Koenig' ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', + ' to view, search and filter the results.' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/', 'author': 'Scott Koenig', 'version': '1.0', 'date': '2025-02-05', 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', - 'category': 'Photos.sqlite-P-GenerativePlayground_PL_Artifacts', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS18-GenPlaygrndPL-Psql', 'notes': '', 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), "output_types": ["standard", "tsv", "none"], @@ -57,7 +60,7 @@ from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS @artifact_processor -def Ph98_1iOS18RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph098_1iOS18RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -4115,7 +4118,7 @@ def Ph98_1iOS18RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, w return data_headers, data_list, source_path @artifact_processor -def Ph98_2iOS18RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph098_2iOS18RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) @@ -8176,7 +8179,7 @@ def Ph98_2iOS18RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wra return data_headers, data_list, source_path @artifact_processor -def Ph98_3iOS18RefforAssetAnalysisGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +def Ph098_3iOS18RefforAssetAnalysisGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): for source_path in files_found: source_path = str(source_path) diff --git a/scripts/artifacts/Ph10AssetParsedEmbeddedFiles.py b/scripts/artifacts/Ph10AssetParsedEmbeddedFiles.py deleted file mode 100644 index fd433fd12..000000000 --- a/scripts/artifacts/Ph10AssetParsedEmbeddedFiles.py +++ /dev/null @@ -1,4460 +0,0 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for assets that have embedded files. -# This parser should be used in conjunction with other parsers to review a complete record for analysis. -# The results of this parser could produce multiple records for a single asset. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# - -import os -import plistlib -import nska_deserialize as nd -from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly, iOS - - -def get_ph10assetparsedembeddedfilesphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported ios version for PhotosData-Photos.sqlite assets have embedded files from iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZGENERICASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_geoplaceresult = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_geoplaceresult = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[8] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[8]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaashiftedlocation_geoplaceresult = val - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[11] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[11]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaareverselocation_geoplaceresult = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - aaashiftedlocation_geoplaceresult, - row[9], row[10], - aaareverselocation_geoplaceresult, - row[12], row[13], row[14], row[15])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr-Shifted Location Valid-6', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-7', - 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-8', - 'zAddAssetAttr-Reverse Location Is Valid-9', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-10', - 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-11', - 'zAsset-zPK-12', - 'zAddAssetAttr-zPK-13', - 'zAsset-UUID = store.cloudphotodb-14', - 'zAddAssetAttr-Master Fingerprint-15') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZGENERICASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[8] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[8]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[11] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[11]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[23] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[23]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - aaashiftedlocation_postal_address, - row[9], row[10], - aaareverselocation_postal_address, - row[12], row[13], row[14], row[15], row[16], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[18], row[19], row[20], row[21], row[22], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[24], row[25], row[26], row[27])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr-Shifted Location Valid-6', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator7-', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-8', - 'zAddAssetAttr-Reverse Location Is Valid-9', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-10', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-11', - 'AAAzCldMastMedData-zOPT-12', - 'zAddAssetAttr-Media Metadata Type-13', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-14', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast- MediaMetaData-15', - 'AAAzCldMastMedData-Data-HasDataIndicator-16', - 'AAAzCldMastMedData-Data_plist_TIFF-17', - 'AAAzCldMastMedData-Data_plist_Exif-17', - 'AAAzCldMastMedData-Data_plist_GPS-17', - 'AAAzCldMastMedData-Data_plist_IPTC-17', - 'CldMasterzCldMastMedData-zOPT-18', - 'zCldMast-Media Metadata Type-19', - 'zCldMast-Media Metadata Key= zCldMastMedData-zPK-20', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast- MediaMetaData Key-21', - 'CMzCldMastMedData-Data-HasDataIndicator-22', - 'CMzCldMastMedData-Data_plist_TIFF-23', - 'CMzCldMastMedData-Data_plist_Exif-23', - 'CMzCldMastMedData-Data_plist_GPS-23', - 'CMzCldMastMedData-Data_plist_IPTC-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Master Fingerprint-27') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[8] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[8]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[11] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[11]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[23] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[23]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[30] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[30]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from Asset PK ' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[34] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[34]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - aaashiftedlocation_postal_address, - row[9], row[10], - aaareverselocation_postal_address, - row[12], row[13], row[14], row[15], row[16], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[18], row[19], row[20], row[21], row[22], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[24], row[25], row[26], row[27], row[28], row[29], - zsharepartic_namecomponents, - row[31], row[32], row[33], - zshare_previewdata_blob, - row[35], row[36], row[37], row[38])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr-Shifted Location Valid-6', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-7', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-8', - 'zAddAssetAttr-Reverse Location Is Valid-9', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-10', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-11', - 'AAAzCldMastMedData-zOPT-12', - 'zAddAssetAttr-Media Metadata Type-13', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-14', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-15', - 'AAAzCldMastMedData-Data-HasDataIndicator-16', - 'AAAzCldMastMedData-Data_plist_TIFF-17', - 'AAAzCldMastMedData-Data_plist_Exif-17', - 'AAAzCldMastMedData-Data_plist_GPS-17', - 'AAAzCldMastMedData-Data_plist_IPTC-17', - 'CldMasterzCldMastMedData-zOPT-18', - 'zCldMast-Media Metadata Type-19', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-20', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-21', - 'CMzCldMastMedData-Data-HasDataIndicator-22', - 'CMzCldMastMedData-Data_plist_TIFF-23', - 'CMzCldMastMedData-Data_plist_Exif-23', - 'CMzCldMastMedData-Data_plist_GPS-23', - 'CMzCldMastMedData-Data_plist_IPTC-23', - 'zSharePartic-Acceptance Status-24', - 'zSharePartic-User ID-25', - 'zSharePartic-zPK-26', - 'zSharePartic-Email Address-27', - 'zSharePartic-Phone Number-28', - 'zSharePartic-Name_Components-HasDataIndicator-29', - 'zSharePartic-Name_Components_Plist-30', - 'zSharePartic-Is Current User-31', - 'zSharePartic-Role-32', - 'zShare-Preview_Data-DataIndicator-33', - 'zShare-Preview_Data-BLOB_JPG-34', - 'zAsset-zPK-35', - 'zAddAssetAttr-zPK-36', - 'zAsset-UUID = store.cloudphotodb-37', - 'zAddAssetAttr-Master Fingerprint-38') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], row[38], row[39])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'zAsset-zPK-36', - 'zAddAssetAttr-zPK-37', - 'zAsset-UUID = store.cloudphotodb-38', - 'zAddAssetAttr-Master Fingerprint-39') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - CASE SPLzSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' - END AS 'SPLzSharePartic-Is Current User', - CASE SPLzSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' - END AS 'SPLzSharePartic-Role', - zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - CASE - WHEN SPLzSharePartic.ZNAMECOMPONENTS > 0 THEN 'SPLzSharePartic-Name_Components_has_Plist' - ELSE 'SPLzSharePartic-Name_Components_Empty-NULL' - END AS 'SPLzSharePartic-Name_Components-HasDataIndicator', - SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name_Components', - CASE - WHEN SPLzShare.ZPREVIEWDATA > 0 THEN 'SPLzShare-Preview_Data_has_BLOB' - ELSE 'SPLzShare-Preview_Data_Empty-NULL' - END AS 'SPLzShare-Preview_Data-DataIndicator', - SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - splzsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - splzshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - if row[42] is not None: - pathto = os.path.join(report_folder, 'SPLzSharePartic-Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[42]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - splzsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - if row[44] is not None: - pathto = os.path.join(report_folder, 'SPLzShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[44]) - splzshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], - row[38], row[39], row[40], row[41], - splzsharepartic_namecomponents, - row[43], - splzshare_previewdata_blob, - row[45], row[46], row[47], row[48])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzSharePartic-Name_Components-HasDataIndicator-41', - 'SPLzSharePartic-Name_Components_Plist-42', - 'zShare-Preview_Data-DataIndicator-43', - 'zShare-Preview_Data-BLOB_JPG-44', - 'zAsset-zPK-45', - 'zAddAssetAttr-zPK-46', - 'zAsset-UUID = store.cloudphotodb-47', - 'zAddAssetAttr-Master Fingerprint-48') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - CASE SPLzSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' - END AS 'SPLzSharePartic-Is Current User', - CASE SPLzSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' - END AS 'SPLzSharePartic-Role', - zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - CASE - WHEN SPLzSharePartic.ZNAMECOMPONENTS > 0 THEN 'SPLzSharePartic-Name_Components_has_Plist' - ELSE 'SPLzSharePartic-Name_Components_Empty-NULL' - END AS 'SPLzSharePartic-Name_Components-HasDataIndicator', - SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name_Components', - CASE - WHEN SPLzShare.ZPREVIEWDATA > 0 THEN 'SPLzShare-Preview_Data_has_BLOB' - ELSE 'SPLzShare-Preview_Data_Empty-NULL' - END AS 'SPLzShare-Preview_Data-DataIndicator', - SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', - zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - splzsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - splzshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - if row[42] is not None: - pathto = os.path.join(report_folder, 'SPLzSharePartic-Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[42]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - splzsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - if row[44] is not None: - pathto = os.path.join(report_folder, 'SPLzShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[44]) - splzshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], - row[38], row[39], row[40], row[41], - splzsharepartic_namecomponents, - row[43], - splzshare_previewdata_blob, - row[45], row[46], row[47], row[48], row[49])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzSharePartic-Name_Components-HasDataIndicator-41', - 'SPLzSharePartic-Name_Components_Plist-42', - 'zShare-Preview_Data-DataIndicator-43', - 'zShare-Preview_Data-BLOB_JPG-44', - 'zAsset-zPK-45', - 'zAddAssetAttr-zPK-46', - 'zAsset-UUID = store.cloudphotodb-47', - 'zAddAssetAttr-Master Fingerprint-48', - 'zAddAssetAttr.Adjusted Fingerprint-49') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - CASE SPLzSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' - END AS 'SPLzSharePartic-Is Current User', - CASE SPLzSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' - END AS 'SPLzSharePartic-Role', - zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - CASE - WHEN SPLzSharePartic.ZNAMECOMPONENTS > 0 THEN 'SPLzSharePartic-Name_Components_has_Plist' - ELSE 'SPLzSharePartic-Name_Components_Empty-NULL' - END AS 'SPLzSharePartic-Name_Components-HasDataIndicator', - SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name_Components', - CASE - WHEN SPLzShare.ZPREVIEWDATA > 0 THEN 'SPLzShare-Preview_Data_has_BLOB' - ELSE 'SPLzShare-Preview_Data_Empty-NULL' - END AS 'SPLzShare-Preview_Data-DataIndicator', - SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - splzsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - splzshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - if row[42] is not None: - pathto = os.path.join(report_folder, 'SPLzSharePartic-Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[42]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - splzsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - if row[44] is not None: - pathto = os.path.join(report_folder, 'SPLzShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[44]) - splzshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], - row[38], row[39], row[40], row[41], - splzsharepartic_namecomponents, - row[43], - splzshare_previewdata_blob, - row[45], row[46], row[47], row[48], row[49])) - - counter += 1 - - description = 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' \ - ' records for a variety of data. This parser should be used in conjunction with other' \ - ' parsers to review a complete record for analysis. The results of this parser could' \ - ' produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.1-Assets have embedded files-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph10.1-Assets have embedded files-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzSharePartic-Name_Components-HasDataIndicator-41', - 'SPLzSharePartic-Name_Components_Plist-42', - 'zShare-Preview_Data-DataIndicator-43', - 'zShare-Preview_Data-BLOB_JPG-44', - 'zAsset-zPK-45', - 'zAddAssetAttr-zPK-46', - 'zAsset-UUID = store.cloudphotodb-47', - 'zAddAssetAttr-Original Stable Hash-iOS18-48', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-49') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.1-Assets have embedded files-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.1-Assets have embedded files-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - -def get_ph10assetparsedembeddedfilessyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported ios version for Syndication.photoslibrary-database-Photos.sqlite assets have embedded files from iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZGENERICASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_geoplaceresult = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_geoplaceresult = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[8] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[8]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaashiftedlocation_geoplaceresult = val - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[11] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[11]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaareverselocation_geoplaceresult = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - aaashiftedlocation_geoplaceresult, - row[9], row[10], - aaareverselocation_geoplaceresult, - row[12], row[13], row[14], row[15])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr-Shifted Location Valid-6', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-7', - 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-8', - 'zAddAssetAttr-Reverse Location Is Valid-9', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-10', - 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-11', - 'zAsset-zPK-12', - 'zAddAssetAttr-zPK-13', - 'zAsset-UUID = store.cloudphotodb-14', - 'zAddAssetAttr-Master Fingerprint-15') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZGENERICASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[8] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[8]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[11] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[11]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[23] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[23]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - aaashiftedlocation_postal_address, - row[9], row[10], - aaareverselocation_postal_address, - row[12], row[13], row[14], row[15], row[16], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[18], row[19], row[20], row[21], row[22], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[24], row[25], row[26], row[27])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr-Shifted Location Valid-6', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-7', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-8', - 'zAddAssetAttr-Reverse Location Is Valid-9', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-10', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-11', - 'AAAzCldMastMedData-zOPT-12', - 'zAddAssetAttr-Media Metadata Type-13', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-14', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast- MediaMetaData-15', - 'AAAzCldMastMedData-Data-HasDataIndicator-16', - 'AAAzCldMastMedData-Data_plist_TIFF-17', - 'AAAzCldMastMedData-Data_plist_Exif-17', - 'AAAzCldMastMedData-Data_plist_GPS-17', - 'AAAzCldMastMedData-Data_plist_IPTC-17', - 'CldMasterzCldMastMedData-zOPT-18', - 'zCldMast-Media Metadata Type-19', - 'zCldMast-Media Metadata Key= zCldMastMedData-zPK-20', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast- MediaMetaData Key-21', - 'CMzCldMastMedData-Data-HasDataIndicator-22', - 'CMzCldMastMedData-Data_plist_TIFF-23', - 'CMzCldMastMedData-Data_plist_Exif-23', - 'CMzCldMastMedData-Data_plist_GPS-23', - 'CMzCldMastMedData-Data_plist_IPTC-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Master Fingerprint-27') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[8] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[8]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[11] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[11]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[23] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[23]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[30] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[30]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from Asset PK ' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[34] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[34]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - aaashiftedlocation_postal_address, - row[9], row[10], - aaareverselocation_postal_address, - row[12], row[13], row[14], row[15], row[16], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[18], row[19], row[20], row[21], row[22], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[24], row[25], row[26], row[27], row[28], row[29], - zsharepartic_namecomponents, - row[31], row[32], row[33], - zshare_previewdata_blob, - row[35], row[36], row[37], row[38])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr-Shifted Location Valid-6', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-7', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-8', - 'zAddAssetAttr-Reverse Location Is Valid-9', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-10', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-11', - 'AAAzCldMastMedData-zOPT-12', - 'zAddAssetAttr-Media Metadata Type-13', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-14', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-15', - 'AAAzCldMastMedData-Data-HasDataIndicator-16', - 'AAAzCldMastMedData-Data_plist_TIFF-17', - 'AAAzCldMastMedData-Data_plist_Exif-17', - 'AAAzCldMastMedData-Data_plist_GPS-17', - 'AAAzCldMastMedData-Data_plist_IPTC-17', - 'CldMasterzCldMastMedData-zOPT-18', - 'zCldMast-Media Metadata Type-19', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-20', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-21', - 'CMzCldMastMedData-Data-HasDataIndicator-22', - 'CMzCldMastMedData-Data_plist_TIFF-23', - 'CMzCldMastMedData-Data_plist_Exif-23', - 'CMzCldMastMedData-Data_plist_GPS-23', - 'CMzCldMastMedData-Data_plist_IPTC-23', - 'zSharePartic-Acceptance Status-24', - 'zSharePartic-User ID-25', - 'zSharePartic-zPK-26', - 'zSharePartic-Email Address-27', - 'zSharePartic-Phone Number-28', - 'zSharePartic-Name_Components-HasDataIndicator-29', - 'zSharePartic-Name_Components_Plist-30', - 'zSharePartic-Is Current User-31', - 'zSharePartic-Role-32', - 'zShare-Preview_Data-DataIndicator-33', - 'zShare-Preview_Data-BLOB_JPG-34', - 'zAsset-zPK-35', - 'zAddAssetAttr-zPK-36', - 'zAsset-UUID = store.cloudphotodb-37', - 'zAddAssetAttr-Master Fingerprint-38') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename ' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], row[38], row[39])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'zAsset-zPK-36', - 'zAddAssetAttr-zPK-37', - 'zAsset-UUID = store.cloudphotodb-38', - 'zAddAssetAttr-Master Fingerprint-39') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - CASE SPLzSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' - END AS 'SPLzSharePartic-Is Current User', - CASE SPLzSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' - END AS 'SPLzSharePartic-Role', - zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - CASE - WHEN SPLzSharePartic.ZNAMECOMPONENTS > 0 THEN 'SPLzSharePartic-Name_Components_has_Plist' - ELSE 'SPLzSharePartic-Name_Components_Empty-NULL' - END AS 'SPLzSharePartic-Name_Components-HasDataIndicator', - SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name_Components', - CASE - WHEN SPLzShare.ZPREVIEWDATA > 0 THEN 'SPLzShare-Preview_Data_has_BLOB' - ELSE 'SPLzShare-Preview_Data_Empty-NULL' - END AS 'SPLzShare-Preview_Data-DataIndicator', - SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - splzsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - splzshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - if row[42] is not None: - pathto = os.path.join(report_folder, 'SPLzSharePartic-Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[42]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - splzsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename ' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - if row[44] is not None: - pathto = os.path.join(report_folder, 'SPLzShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[44]) - splzshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], - row[38], row[39], row[40], row[41], - splzsharepartic_namecomponents, - row[43], - splzshare_previewdata_blob, - row[45], row[46], row[47], row[48])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzSharePartic-Name_Components-HasDataIndicator-41', - 'SPLzSharePartic-Name_Components_Plist-42', - 'zShare-Preview_Data-DataIndicator-43', - 'zShare-Preview_Data-BLOB_JPG-44', - 'zAsset-zPK-45', - 'zAddAssetAttr-zPK-46', - 'zAsset-UUID = store.cloudphotodb-47', - 'zAddAssetAttr-Master Fingerprint-48') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - CASE SPLzSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' - END AS 'SPLzSharePartic-Is Current User', - CASE SPLzSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' - END AS 'SPLzSharePartic-Role', - zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - CASE - WHEN SPLzSharePartic.ZNAMECOMPONENTS > 0 THEN 'SPLzSharePartic-Name_Components_has_Plist' - ELSE 'SPLzSharePartic-Name_Components_Empty-NULL' - END AS 'SPLzSharePartic-Name_Components-HasDataIndicator', - SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name_Components', - CASE - WHEN SPLzShare.ZPREVIEWDATA > 0 THEN 'SPLzShare-Preview_Data_has_BLOB' - ELSE 'SPLzShare-Preview_Data_Empty-NULL' - END AS 'SPLzShare-Preview_Data-DataIndicator', - SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', - zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - splzsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - splzshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - if row[42] is not None: - pathto = os.path.join(report_folder, 'SPLzSharePartic-Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[42]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - splzsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename ' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - if row[44] is not None: - pathto = os.path.join(report_folder, 'SPLzShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[44]) - splzshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], - row[38], row[39], row[40], row[41], - splzsharepartic_namecomponents, - row[43], - splzshare_previewdata_blob, - row[45], row[46], row[47], row[48], row[49])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzSharePartic-Name_Components-HasDataIndicator-41', - 'SPLzSharePartic-Name_Components_Plist-42', - 'zShare-Preview_Data-DataIndicator-43', - 'zShare-Preview_Data-BLOB_JPG-44', - 'zAsset-zPK-45', - 'zAddAssetAttr-zPK-46', - 'zAsset-UUID = store.cloudphotodb-47', - 'zAddAssetAttr-Master Fingerprint-48', - 'zAddAssetAttr.Adjusted Fingerprint-49') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-HasDataIndicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-HasDataIndicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - CASE zSharePartic.ZACCEPTANCESTATUS - WHEN 1 THEN '1-Invite-Pending_or_Declined-1' - WHEN 2 THEN '2-Invite-Accepted-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' - END AS 'zSharePartic-Acceptance Status', - zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', - zSharePartic.Z_PK AS 'zSharePartic-zPK', - zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', - zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', - CASE - WHEN zSharePartic.ZNAMECOMPONENTS > 0 THEN 'zSharePartic-Name_Components_has_Plist' - ELSE 'zSharePartic-Name_Components_Empty-NULL' - END AS 'zSharePartic-Name_Components-HasDataIndicator', - zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name_Components', - CASE zSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' - END AS 'zSharePartic-Is Current User', - CASE zSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' - END AS 'zSharePartic-Role', - CASE - WHEN zShare.ZPREVIEWDATA > 0 THEN 'zShare-Preview_Data_has_BLOB' - ELSE 'zShare-Preview_Data_Empty-NULL' - END AS 'zShare-Preview_Data-DataIndicator', - zShare.ZPREVIEWDATA AS 'zShare-Preview_Data', - CASE SPLzSharePartic.ZISCURRENTUSER - WHEN 0 THEN '0-Participant-Not_CurrentUser-0' - WHEN 1 THEN '1-Participant-Is_CurrentUser-1' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' - END AS 'SPLzSharePartic-Is Current User', - CASE SPLzSharePartic.ZROLE - WHEN 1 THEN '1-Participant-is-Owner-Role-1' - WHEN 2 THEN '2-Participant-is-Invitee-Role-2' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' - END AS 'SPLzSharePartic-Role', - zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - CASE - WHEN SPLzSharePartic.ZNAMECOMPONENTS > 0 THEN 'SPLzSharePartic-Name_Components_has_Plist' - ELSE 'SPLzSharePartic-Name_Components_Empty-NULL' - END AS 'SPLzSharePartic-Name_Components-HasDataIndicator', - SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name_Components', - CASE - WHEN SPLzShare.ZPREVIEWDATA > 0 THEN 'SPLzShare-Preview_Data_has_BLOB' - ELSE 'SPLzShare-Preview_Data_Empty-NULL' - END AS 'SPLzShare-Preview_Data-DataIndicator', - SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview_Data', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON - AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON - CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - # zSharePartic_ZNAMECOMPONENTS_PLIST - zsharepartic_namecomponents = '' - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - splzsharepartic_namecomponents = '' - # zShare.ZPREVIEWDATA-BLOB_JPG - zshare_previewdata_blob = '' - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - splzshare_previewdata_blob = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[9] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[9]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[12] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[12]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[2]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[18] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[18]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[24] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[2] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[24]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - # zSharePartic_ZNAMECOMPONENTS_PLIST - if row[31] is not None: - pathto = os.path.join(report_folder, 'zSP_Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[31]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - zsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename' + row[2]) - - # SPLzSharePartic_ZNAMECOMPONENTS_PLIST - if row[42] is not None: - pathto = os.path.join(report_folder, 'SPLzSharePartic-Name_Components_' + row[2] + '.bplist') - with open(pathto, 'ab') as wf: - wf.write(row[42]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - splzsharepartic_namecomponents = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[2]) - else: - logfunc('Error reading exported bplist from zAsset-Filename ' + row[2]) - - # zShare.ZPREVIEWDATA-BLOB_JPG - if row[35] is not None: - pathto = os.path.join(report_folder, 'zShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[35]) - zshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - # SPLzShare.ZPREVIEWDATA-BLOB_JPG - if row[44] is not None: - pathto = os.path.join(report_folder, 'SPLzShare_PreviewData_' + row[2] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[44]) - splzshare_previewdata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], - aaashiftedlocation_postal_address, - row[10], row[11], - aaareverselocation_postal_address, - row[13], row[14], row[15], row[16], row[17], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[19], row[20], row[21], row[22], row[23], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[25], row[26], row[27], row[28], row[29], row[30], - zsharepartic_namecomponents, - row[32], row[33], row[34], - zshare_previewdata_blob, - row[36], row[37], - row[38], row[39], row[40], row[41], - splzsharepartic_namecomponents, - row[43], - splzshare_previewdata_blob, - row[45], row[46], row[47], row[48], row[49])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' \ - ' for assets that have embedded files records for a variety of data. This parser' \ - ' should be used in conjunction with other parsers to review a complete record' \ - ' for analysis. The results of this parser could produce multiple records for a single asset.' - report = ArtifactHtmlReport('Ph10.2-Assets have embedded files-SyndPL') - report.start_artifact_report(report_folder, 'Ph10.2-Assets have embedded files-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Directory-Path-1', - 'zAsset-Filename-2', - 'zAddAssetAttr- Original Filename-3', - 'zCldMast- Original Filename-4', - 'zCldMast-Import Session ID- AirDrop-StillTesting-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAddAssetAttr-Shifted Location Valid-7', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-8', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-9', - 'zAddAssetAttr-Reverse Location Is Valid-10', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-11', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-12', - 'AAAzCldMastMedData-zOPT-13', - 'zAddAssetAttr-Media Metadata Type-14', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-15', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-16', - 'AAAzCldMastMedData-Data-HasDataIndicator-17', - 'AAAzCldMastMedData-Data_plist_TIFF-18', - 'AAAzCldMastMedData-Data_plist_Exif-18', - 'AAAzCldMastMedData-Data_plist_GPS-18', - 'AAAzCldMastMedData-Data_plist_IPTC-18', - 'CldMasterzCldMastMedData-zOPT-19', - 'zCldMast-Media Metadata Type-20', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-21', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-22', - 'CMzCldMastMedData-Data-HasDataIndicator-23', - 'CMzCldMastMedData-Data_plist_TIFF-24', - 'CMzCldMastMedData-Data_plist_Exif-24', - 'CMzCldMastMedData-Data_plist_GPS-24', - 'CMzCldMastMedData-Data_plist_IPTC-24', - 'zSharePartic-Acceptance Status-25', - 'zSharePartic-User ID-26', - 'zSharePartic-zPK-27', - 'zSharePartic-Email Address-28', - 'zSharePartic-Phone Number-29', - 'zSharePartic-Name_Components-HasDataIndicator-30', - 'zSharePartic-Name_Components_Plist-31', - 'zSharePartic-Is Current User-32', - 'zSharePartic-Role-33', - 'zShare-Preview_Data-DataIndicator-34', - 'zShare-Preview_Data-BLOB_JPG-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzSharePartic-Name_Components-HasDataIndicator-41', - 'SPLzSharePartic-Name_Components_Plist-42', - 'zShare-Preview_Data-DataIndicator-43', - 'zShare-Preview_Data-BLOB_JPG-44', - 'zAsset-zPK-45', - 'zAddAssetAttr-zPK-46', - 'zAsset-UUID = store.cloudphotodb-47', - 'zAddAssetAttr-Original Stable Hash-iOS18-48', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-49') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph10.2-Assets have embedded files-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph10.2-Assets have embedded files-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets having embedded files') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph10-1-Assets have embedded files-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph10.1 assets have embedded files', - 'description': 'Parses basic asset record data from Photos.sqlite for assets that have embedded files' - ' records for a variety of data. This parser should be used in conjunction with other' - ' parsers to review a complete record for analysis. The results of this parser could' - ' produce multiple records for a single asset.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph10assetparsedembeddedfilesphdapsql' - }, - 'Ph10-2-Assets have embedded files-SyndPL': { - 'name': 'SyndPL Photos.sqlite Ph10.2 assets have embedded files', - 'description': 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite' - ' for assets that have embedded files records for a variety of data. This parser' - ' should be used in conjunction with other parsers to review a complete record for analysis.' - ' The results of this parser could produce multiple records for a single asset.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph10assetparsedembeddedfilessyndpl' - } -} diff --git a/scripts/artifacts/Ph126iOS26REFforAssetAnalysis.py b/scripts/artifacts/Ph126iOS26REFforAssetAnalysis.py new file mode 100644 index 000000000..cfad39018 --- /dev/null +++ b/scripts/artifacts/Ph126iOS26REFforAssetAnalysis.py @@ -0,0 +1,12950 @@ +__artifacts_v2__ = { + 'Ph126_1iOS26RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph126.1-iOS26_Ref_for_Asset_Analysis-PhDaPsql', + 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '1.0', + 'date': '2026-05-25', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS26-PhotoData-Psql', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"], + "artifact_icon": "database" + }, + 'Ph126_2iOS26RefforAssetAnalysisSyndPL': { + 'name': 'Ph126.2-iOS26_Ref_for_Asset_Analysis-SyndPL', + 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' + ' This parser includes the largest set of decoded data based on testing and research' + ' conducted by Scott Koenig https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/. I recommend opening the' + ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' + ' TimelineExplorer to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '1.0', + 'date': '2026-05-25', + 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS26-SyndicationPL-Psql', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"], + "artifact_icon": "database" + }, + 'Ph126_3iOS26RefforAssetAnalysisGenPlayPsql': { + 'name': 'Ph126.3-iOS26_Ref_for_Asset_Analysis-GenPlayPsql', + 'description': 'Parses asset records from GenPlay-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/2024/05/18/ileapp-parsers-photos-sqlite-queries/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '1.0', + 'date': '2026-05-25', + 'requirements': 'Acquisition that contains Library GenPlay Photos.sqlite', + 'category': 'Photos.sqlite-Z-TableJoinReference-iOS26-GenPlaygrndPL-Psql', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Application/com.apple.GenerativePlayground/00000000-0000-0000-0000-000000000001.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"], + "artifact_icon": "database" + } +} + +import os +from packaging import version +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc, iOS + +@artifact_processor +def Ph126_1iOS26RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("18.7.8")) or (version.parse(iosversion) >= version.parse("27")): + logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-GenAI_Not_Detected Still_Testing-0' + WHEN 1 THEN '1-Apple_Image_Playground GenAI_Still_Testing-1' + WHEN 2 THEN '2-Apple_Photo_CleanUP GenAI_Still_Testing-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + zAsset.ZIMAGEREQUESTHINTS AS 'zAsset-ImageRequestHints-HEX-Path', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State -4QueryStart', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date - datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll - datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created - datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date - datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created - datetime', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date - datetime', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date - datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date - datetime', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date - datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files - datetime', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date - datetime', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date - datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date - datetime', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAsset.ZLOCATIONDATA AS 'zAsset-Location Data-HEX', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State-4QueryStart', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM- 4QueryStart - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL- 4QueryStart - datetime', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity- 4QueryStart', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum- Kind- 4QueryStart', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind- 4QueryStart', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT-4TableStart', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data-HEX', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT-4TableStart', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data-HEX', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camear_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Detected_Screenshot_Still_Testing-0' + WHEN 1 THEN '1-Detected_Screenshot_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Paorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr.View_Presentation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pening-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustement-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + zIntResou.ZDATASTOREKEYDATA AS 'zIntResou-DataStoreKeyData-HEX', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date - datetime', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date - datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Yes-Adjustments_needs_update_Decoding-2' + WHEN 3 THEN '3-Yes-Adjustments_needs_update_Decoding-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State-Camera-Effects-Filters', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp - datetime', + DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp - datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date - datetime', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', + zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zUnmAdj.ZADJUSTMENTRENDERTYPES + WHEN 0 THEN '0-Standard or Portrait with erros-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Portrait-2' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || '' + END AS 'zUnmAdj-Adjustment Render Types', + CASE zUnmAdj.ZADJUSTMENTFORMATVERSION + WHEN 1.0 THEN '1.0-Markup-1.0' + WHEN 1.1 THEN '1.1-Slow-Mo-1.1' + WHEN 1.2 THEN '1.2-StillTesting' + WHEN 1.3 THEN '1.3-StillTesting' + WHEN 1.4 THEN '1.4-Filter-1.4' + WHEN 1.5 THEN '1.5-Adjust-1.5' + WHEN 1.6 THEN '1.6-Video-Trim-1.6' + WHEN 1.7 THEN '1.7-StillTesting' + WHEN 1.8 THEN '1.8-StillTesting' + WHEN 1.9 THEN '1.9-StillTesting' + WHEN 2.0 THEN '2.0-ScreenshotServices-2.0' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' + END AS 'zUnmAdj-Adjustment Format Version', + zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version StillTesing-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date - datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date - datetime', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp - datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date - datetime', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp - datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zSceneP.ZDATA AS 'zSceneP-Data-HEX NSKeyed Plist', + zSceneP.ZDUPLICATEMATCHINGDATA AS 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist', + zSceneP.ZDUPLICATEMATCHINGALTERNATEDATA AS 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZOBJECTSALIENCYRECTSDATA AS 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist', + zAddAssetAttr.ZORIGINALHASH AS 'zAddAssetAttr-Original Hash-HEX', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version', + DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp - datetime', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESDATA AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date - datetime', + CASE zCldFeedEnt.ZENTRYISMINE + WHEN 0 THEN '0-CldFeedEnt_Is_Mine-0' + WHEN 1 THEN '1-CldFeedEnt_IsNot_Mine-1' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYISMINE || '' + END AS 'zCldFeedEnt-Entry_Is_Mine', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPE + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPE || '' + END AS 'zCldFeedEnt-Entry Type', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date - datetime', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date - datetime', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date - datetime', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart', + SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT-CMM', + CASE SPLzShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' + END AS 'SPLzShare-zENT-SPL', + CASE zSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z66_SHARE || '' + END AS 'zSharePartic-z66SHARE', + CASE SPLzSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z66_SHARE || '' + END AS 'SPLzSharePartic-z66SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-CMM', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-SPL', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-CMM', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-SPL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State-CMM', + CASE SPLzShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || '' + END AS 'SPLzShare-Local Publish State-SPL', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission-CMM', + CASE SPLzShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || '' + END AS 'SPLzShare-Public Permission-SPL', + CASE zShare.ZALLOWSACCESSREQUESTS + WHEN 0 THEN '0-Does Not Allow Access Requests-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZALLOWSACCESSREQUESTS || '' + END AS 'zShare-Allows Access Requests-CMM', + CASE SPLzShare.ZALLOWSACCESSREQUESTS + WHEN 0 THEN '0-Does Not Allow Access Requests-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZALLOWSACCESSREQUESTS || '' + END AS 'SPLzShare-Allows Access Requests-SPL', + CASE zShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE + WHEN 1 THEN '1-CollectionShare Cur User Contrib State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE || '' + END AS 'zShare-CollectionShare CurrentUser ContribState-CMM', + CASE SPLzShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE + WHEN 1 THEN '1-CollectionShare Cur User Contrib State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE || '' + END AS 'SPLzShare-CollectionShare CurrentUser ContribState-SPL', + CASE zShare.ZCOLLECTIONSHAREEXPIRINGSTATE + WHEN 0 THEN '0-CollectionShare Expiring State-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHAREEXPIRINGSTATE || '' + END AS 'zShare-CollectionShare ExpiringState-CMM', + CASE SPLzShare.ZCOLLECTIONSHAREEXPIRINGSTATE + WHEN 0 THEN '0-CollectionShare Expiring State-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHAREEXPIRINGSTATE || '' + END AS 'SPLzShare-CollectionShare ExpiringState-SPL', + CASE zShare.ZCOLLECTIONSHAREKIND + WHEN 2 THEN '2-CollectionShare Kind-stilltesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHAREKIND || '' + END AS 'zShare-CollectionShare Kind-CMM', + CASE SPLzShare.ZCOLLECTIONSHAREKIND + WHEN 2 THEN '2-CollectionShare Kind-stilltesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHAREKIND || '' + END AS 'SPLzShare-CollectionShare Kind-SPL', + CASE zShare.ZCREATIONTYPE + WHEN 0 THEN '0-Creation Type-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCREATIONTYPE || '' + END AS 'zShare-Creation Type-CMM', + CASE SPLzShare.ZCREATIONTYPE + WHEN 0 THEN '0-Creation Type-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCREATIONTYPE || '' + END AS 'SPLzShare-Creation Type-SPL', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM', + SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM', + SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL', + zShare.ZTITLE AS 'zShare-Title-CMM', + SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL-CMM', + SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL', + zShare.ZCLIENTBUNDLEIDENTIFIER AS 'zShare-Client BundleID-CMM', + SPLzShare.ZCLIENTBUNDLEIDENTIFIER AS 'SPLzShare-Client BundleID-SPL', + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM - datetime', + DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL - datetime', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM - datetime', + DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM- 4zShare - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL- 4zShare - datetime', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM - datetime', + DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL - datetime', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM - datetime', + DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL - datetime', + DateTime(zShare.ZLASTMODIFIEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Modified Date-CMM - datetime', + DateTime(SPLzShare.ZLASTMODIFIEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Modified Date-SPL - datetime', + zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM', + SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM', + SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL', + zShare.ZUNSEENASSETSCOUNT AS 'zShare-Unseen Assets Count-CMM', + SPLzShare.ZUNSEENASSETSCOUNT AS 'SPLzShare-Unseen Assets Count-SPL', + CASE zShare.ZUNSEENCONTENTSTATE + WHEN 1 THEN '1-Unseen Content State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZUNSEENCONTENTSTATE || '' + END AS 'zShare-Unseen Content State-CMM', + CASE SPLzShare.ZUNSEENCONTENTSTATE + WHEN 1 THEN '1-Unseen Content State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZUNSEENCONTENTSTATE || '' + END AS 'SPLzShare-Unseen Content State-SPL', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State-CMM', + CASE SPLzShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || '' + END AS 'SPLzShare-Cloud Local State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || '' + END AS 'SPLzShare-Scope Syncing State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE1 + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE1 || '' + END AS 'zShare-Scope Syncing State1-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE1 + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE1 || '' + END AS 'SPLzShare-Scope Syncing State1-SPL', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy-CMM', + CASE SPLzShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || '' + END AS 'SPLzShare-Auto Share Policy-SPL', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-CMM-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion-CMM', + CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'SPLzShare-Should Notify On Upload Completion-SPL', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State-CMM', + CASE SPLzShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || '' + END AS 'SPLzShare-Trashed State-SPL', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State-CMM', + CASE SPLzShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || '' + END AS 'SPLzShare-Cloud Delete State-SPL', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM - datetime', + DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL - datetime', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM - datetime', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL - datetime', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM - datetime', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL - datetime', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source-CMM', + CASE SPLzShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || '' + END AS 'SPLzShare-Exit Source-SPL', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-SPL_Exit State-CMM', + CASE SPLzShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || '' + END AS 'SPLzShare-SPL_Exit State-SPL', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type-CMM', + CASE SPLzShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || '' + END AS 'SPLzShare-Exit Type-SPL', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignor Budgets-CMM', + CASE SPLzShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'SPLzShare-Should Ignor Budgets-SPL', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State-CMM', + CASE SPLzShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || '' + END AS 'SPLzShare-Preview State-SPL', + zShare.ZPHONEINVITATIONTOKEN AS 'zShare-Phone Invitation Token-CMM', + SPLzShare.ZPHONEINVITATIONTOKEN AS 'SPLzShare-Phone Invitation Token-SPL', + zShare.ZCKSHAREDATA AS 'zShare-CK Share Data-CMM', + SPLzShare.ZCKSHAREDATA AS 'SPLzShare-CK Share Data-SPL', + zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM', + SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL', + zShare.ZRULESDATA AS 'zShare-Rules-CMM', + SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State-CMM', + CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'SPLzShare-Participant Cloud Update State-SPL', + zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart', + SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + CASE SPLzSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || '' + END AS 'SPLzSharePartic-Acceptance Status', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_This_User-0' + WHEN 1 THEN '1-Participant-Is_This_User-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'SPLzSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE SPLzSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' + END AS 'SPLzSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE SPLzSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || '' + END AS 'SPLzSharePartic-Premission', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart', + zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name Components', + SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name Components', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE SPLzSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || '' + END AS 'SPLzSharePartic-Exit State', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date - datetime', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date - datetime', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date - datetime', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date - datetime', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date - datetime', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date - datetime', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date - datetime', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date - datetime', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL - datetime', + zGenAlbum.ZCLOUDMETADATA AS 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist', + SWYConverszGenAlbum.ZCLOUDMETADATA AS 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'SWYConverszGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'SWYConverszGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE SWYConverszGenAlbum.ZISOWNED + WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || '' + END AS 'SWYConverszGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID', + zShare.ZCLOUDPERSONID AS 'zShare-Cloud Person ID-CMM', + SPLzShare.ZCLOUDPERSONID AS 'SPLzShare-Cloud Person ID-SPL', + zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'SWYConverszGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date - datetime', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date - datetime', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Notification Enabled', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date - datetime', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date - datetime', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date - datetime', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled', + SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'SWYConverszGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE SWYConverszGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || '' + END AS 'SWYConverszGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date - datetime', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID', + CASE + WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset' + ELSE 'Face Area Points Not Detected in zAsset' + END AS 'zFaceCrop-Face Area Points', + CASE zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || '' + END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence', + zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version', + zAddAssetAttr.ZFACEREGIONS AS 'zAddAssetAttr-Face Regions HEX', + zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', + CASE zDetFace.ZASSETVISIBLE + WHEN 0 THEN 'Asset Not Visible Photo Library-0' + WHEN 1 THEN 'Asset Visible Photo Library-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || '' + END AS 'zDetFace-Asset Visible', + zDetFacePrint.ZDATA AS 'zDetFacePrint-Data HEX', + zPerson.ZCONTACTMATCHINGDICTIONARY AS 'zPerson-Contact Matching Dictionary HEX', + zPerson.ZFACECOUNT AS 'zPerson-Face Count', + zDetFace.ZFACECROP AS 'zDetFace-Face Crop', + zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version', + zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version', + zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-4TableStart', + zPerson.ZMDID AS 'zPerson - MD ID', + CASE zPerson.ZASSETSORTORDER + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || '' + END AS 'zPerson - Asset Sort Order', + CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || '' + END AS 'zDetFace-Confirmed Face Crop Generation State', + CASE zDetFace.ZMANUAL + WHEN 0 THEN 'zDetFace-Auto Detected-0' + WHEN 1 THEN 'zDetFace-Manually Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || '' + END AS 'zDetFace-Manual', + CASE zDetFace.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || '' + END AS 'zDetFace-Detection Type', + CASE zPerson.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || '' + END AS 'zPerson-Detection Type', + CASE zDetFace.ZVIPMODELTYPE + WHEN 0 THEN 'Not VIP-0' + WHEN 1 THEN 'VIP-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || '' + END AS 'zDetFace-VIP Model Type', + CASE zDetFace.ZNAMESOURCE + WHEN 0 THEN 'No Name Listed-0' + WHEN 1 THEN '1-Face Crop-1' + WHEN 2 THEN '2-Verified-Has-Person-URI' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || '' + END AS 'zDetFace-Name Source', + CASE zDetFace.ZCLOUDNAMESOURCE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN '1-User Added Via Face Crop-1' + WHEN 5 THEN '5-Asset Shared has Name' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || '' + END AS 'zDetFace-Cloud Name Source', + zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence', + zPerson.ZPERSONURI AS 'zPerson-Person URI', + zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', + zPerson.ZFULLNAME AS 'zPerson-Full Name', + CASE zPerson.ZCLOUDVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || '' + END AS 'zPerson-Cloud Verified Type', + CASE zFaceCrop.ZSTATE + WHEN 5 THEN 'Validated-5' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || '' + END AS 'zFaceCrop-State', + CASE zFaceCrop.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-Active' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || '' + END AS 'zFaceCrop-Type', + zFaceCrop.ZRESOURCEDATA AS 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart', + CASE zPerson.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || '' + END AS 'zPerson-Type', + CASE zPerson.ZVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' + END AS 'zPerson-Verified Type', + CASE zPerson.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || '' + END AS 'zPerson-Gender Type', + CASE zDetFace.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || '' + END AS 'zDetFace-Gender Type', + zDetFace.ZCENTERX AS 'zDetFace-Center X', + zDetFace.ZCENTERY AS 'zDetFace-Center Y', + CASE zPerson.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || '' + END AS 'zPerson-Age Type Estimate', + CASE zDetFace.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || '' + END AS 'zDetFace-Age Type Estimate', + CASE zDetFace.ZETHNICITYTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-African American-1' + WHEN 2 THEN 'White-2' + WHEN 3 THEN 'Hispanic-Latino-3' + WHEN 4 THEN 'Asian-4' + WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || '' + END AS 'zDetFace-Ethnicity Type', + CASE zDetFace.ZSKINTONETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Light-Pale White Skin Tone-1' + WHEN 2 THEN 'White-Fair Skin Tone-2' + WHEN 3 THEN 'Medium-White to Olive Skin Tone-3' + WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4' + WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5' + WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || '' + END AS 'zDetFace-Skin Tone Type', + CASE zDetFace.ZHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + WHEN 6 THEN '6-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || '' + END AS 'zDetFace-Hair Type', + CASE zDetFace.ZHAIRCOLORTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-Brown Hair Color-1' + WHEN 2 THEN 'Brown-Blonde Hair Color-2' + WHEN 3 THEN 'Brown-Red Hair Color-3' + WHEN 4 THEN 'Red-White Hair Color-4' + WHEN 5 THEN 'StillTesting-Artifical-5' + WHEN 6 THEN 'White-Bald Hair Color-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || '' + END AS 'zDetFace-Hair Color Type', + CASE zDetFace.ZHEADGEARTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-No Headgear' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || '' + END AS 'zDetFace-Head Gear Type', + CASE zDetFace.ZFACIALHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Clean Shaven Facial Hair Type-1' + WHEN 2 THEN 'Beard Facial Hair Type-2' + WHEN 3 THEN 'Goatee Facial Hair Type-3' + WHEN 4 THEN 'Mustache Facial Hair Type-4' + WHEN 5 THEN 'Stubble Facial Hair Type-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || '' + END AS 'zDetFace-Facial Hair Type', + CASE zDetFace.ZHASFACEMASK + WHEN 0 THEN 'No Mask-0' + WHEN 1 THEN 'Has Mask-1' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || '' + END AS 'zDetFace-Has Face Mask', + CASE zDetFace.ZPOSETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Face Frontal Pose-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN 'Face Profile Pose-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || '' + END AS 'zDetFace-Pose Type', + CASE zDetFace.ZFACEEXPRESSIONTYPE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN 'Disgusted-Angry-1' + WHEN 2 THEN 'Suprised-Fearful-2' + WHEN 3 THEN 'Neutral-3' + WHEN 4 THEN 'Confident-Smirk-4' + WHEN 5 THEN 'Happiness-5' + WHEN 6 THEN 'Sadness-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || '' + END AS 'zDetFace-Face Expression Type', + CASE zDetFace.ZHASSMILE + WHEN 0 THEN 'zDetFace No Smile-0' + WHEN 1 THEN 'zDetFace Smile-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || '' + END AS 'zDetFace-Has Smile', + CASE zDetFace.ZSMILETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'zDetFace Smile No Teeth-1' + WHEN 2 THEN 'zDetFace Smile has Teeth-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || '' + END AS 'zDetFace-Smile Type', + CASE zDetFace.ZLIPMAKEUPTYPE + WHEN 0 THEN 'zDetFace No Lip Makeup-0' + WHEN 1 THEN 'zDetFace Lip Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || '' + END AS 'zDetFace-Lip Makeup Type', + CASE zDetFace.ZEYESSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eyes Closed-1' + WHEN 2 THEN 'Eyes Open-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || '' + END AS 'zDetFace-Eyes State', + CASE zDetFace.ZISLEFTEYECLOSED + WHEN 0 THEN 'Left Eye Open-0' + WHEN 1 THEN 'Left Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || '' + END AS 'zDetFace-Is Left Eye Closed', + CASE zDetFace.ZISRIGHTEYECLOSED + WHEN 0 THEN 'Right Eye Open-0' + WHEN 1 THEN 'Right Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || '' + END AS 'zDetFace-Is Right Eye Closed', + zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X', + zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y', + CASE zDetFace.ZGAZETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || '' + END AS 'zDetFace-Face Gaze Type', + CASE zDetFace.ZGLASSESTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eye Glasses-1' + WHEN 2 THEN 'Sun Glasses-2' + WHEN 3 THEN 'No Glasses-3' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || '' + END AS 'zDetFace-Eye Glasses Type', + CASE zDetFace.ZEYEMAKEUPTYPE + WHEN 0 THEN 'No Eye Makeup-0' + WHEN 1 THEN 'Eye Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || '' + END AS 'zDetFace-Eye Makeup Type', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key', + zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID', + zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID', + zDetFace.ZQUALITY AS 'zDetFace-Quality', + zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure', + zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height', + zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width', + CASE zDetFace.ZHIDDEN + WHEN 0 THEN 'Not Hidden-0' + WHEN 1 THEN 'Hidden-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || '' + END AS 'zDetFace-Hidden-Asset Hidden', + CASE zDetFace.ZISINTRASH + WHEN 0 THEN 'Not In Trash-0' + WHEN 1 THEN 'In Trash-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || '' + END AS 'zDetFace-In Trash-Recently Deleted', + CASE zDetFace.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || '' + END AS 'zDetFace-Cloud Local State', + CASE zDetFace.ZTRAININGTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE + END AS 'zDetFace-Training Type', + zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw', + zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X', + zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y', + zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height', + zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width', + zDetFace.ZROLL AS 'zDetFace-Roll', + zDetFace.ZSIZE AS 'zDetFace-Size', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number', + zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score', + zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version', + zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart', + zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State', + zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count', + zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model', + zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key', + zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key', + zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type', + zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type', + zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person', + CASE zPerson.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Person Not Synced with Cloud-0' + WHEN 1 THEN 'Person Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE + END AS 'zPerson-Cloud Local State', + CASE zFaceCrop.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || '' + END AS 'zFaceCrop-Cloud Local State', + CASE zFaceCrop.ZCLOUDTYPE + WHEN 0 THEN 'Has Name-0' + WHEN 5 THEN 'Has Face Key-5' + WHEN 12 THEN '12-StillTesting' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || '' + END AS 'zFaceCrop-Cloud Type', + CASE zPerson.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || '' + END AS 'zPerson-Cloud Delete State', + CASE zFaceCrop.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || '' + END AS 'zFaceCrop-Cloud Delete State', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart', + zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score', + zMemory.ZUUID AS 'zMemory-UUID-4TableStart', + zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte', + zMemory.ZSCORE AS 'zMemory-Score', + zMemory.ZSUBTITLE AS 'zMemory-SubTitle', + zMemory.ZTITLE AS 'zMemory-Title', + CASE zMemory.ZCATEGORY + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 8 THEN '8-StillTesting' + WHEN 16 THEN '16-StillTesting' + WHEN 17 THEN '17-StillTesting' + WHEN 19 THEN '19-StillTesting' + WHEN 21 THEN '21-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 203 THEN '203-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 211 THEN '211-StillTesting' + WHEN 217 THEN '217-StillTesting' + WHEN 220 THEN '220-StillTesting' + WHEN 301 THEN '301-StillTesting' + WHEN 302 THEN '302-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || '' + END AS 'zMemory-Category', + CASE zMemory.ZSUBCATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 206 THEN '206-StillTesting' + WHEN 207 THEN '207-StillTesting' + WHEN 212 THEN '212-StillTesting' + WHEN 213 THEN '213-StillTesting' + WHEN 214 THEN '214-StillTesting' + WHEN 402 THEN '402-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || '' + END AS 'zMemory-SubCategory', + DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date - datetime', + DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date - datetime', + CASE zMemory.ZUSERACTIONOPTIONS + WHEN 0 THEN 'User Actions Options Memory Not User Created-0' + WHEN 1 THEN 'User Actions Options Memory User Created-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || '' + END AS 'zMemory-User Action Options', + CASE zMemory.ZFAVORITE + WHEN 0 THEN 'Memory Not Favorite-0' + WHEN 1 THEN 'Memory Favorite-1' + END AS 'zMemory-Favorite Memory', + zMemory.ZVIEWCOUNT AS 'zMemory-View Count', + zMemory.ZPLAYCOUNT AS 'zMemory-Play Count', + zMemory.ZREJECTED AS 'zMemory-Rejected', + zMemory.ZSHARECOUNT AS 'zMemory-Share Count', + zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition', + zMemory.ZPHOTOSGRAPHDATA AS 'zMemory-PhotosGraphData-HEX NSKeyed Plist', + zMemory.ZMOVIEASSETSTATE AS 'zMemory-MovieAssetState-HEX NSKeyed Plist', + zMemory.ZMOVIEDATA AS 'zMemory-MovieData-HEX NSKeyed Plist', + DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date - datetime', + DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date - datetime', + zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory', + zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory', + zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory', + zMemory.ZPENDINGSTATE AS 'zMemory-Pending State', + CASE zMemory.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || '' + END AS 'zMemory-Featured State', + zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version', + zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier', + CASE zMemory.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || '' + END AS 'zMemory-Notification State', + CASE zMemory.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Memory Not Synced with Cloud-0' + WHEN 1 THEN 'Memory Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || '' + END AS 'zMemory-Cloud Local State', + CASE zMemory.ZCLOUDDELETESTATE + WHEN 0 THEN 'Memory Not Deleted-0' + WHEN 1 THEN 'Memory Deleted-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || '' + END AS 'zMemory-Cloud Delete State', + CASE zMemory.ZSTORYCOLORGRADEKIND + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || '' + END AS 'zMemory-Story Color Grade Kind', + CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || '' + END AS 'zMemory-Story Serialized Title Category', + CASE zMemory.ZSYNDICATEDCONTENTSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || '' + END AS 'zMemory-Syndicated Content State', + CASE zMemory.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting Memory-Search Index State-0' + WHEN 1 THEN '1-StillTesting Memory-Search Index State-1' + WHEN 2 THEN '2-StillTesting Memory-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zMemory-Search Index Rebuild State', + zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature', + zMoment.ZUUID AS 'zMoment-UUID-4TableStart', + zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score', + DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date - datetime', + DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date - datetime', + zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset', + DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date - datetime', + DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date - datetime', + zMoment.ZSUBTITLE AS 'zMoment-SubTitle', + zMoment.ZLOCALIZEDLOCATIONNAMES AS 'zMoment-Localized Location Names', + zMoment.ZTITLE AS 'zMoment-Title', + CASE zMoment.ZORIGINATORSTATE + WHEN 0 THEN '0-StillTesting Moment-Originator_State-0' + WHEN 1 THEN '1-StillTesing Moment-Originator_State-1' + WHEN 2 THEN '2-StillTesting Moment-Originator_State-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || '' + END AS 'zMoment-Originator State', + CASE zMoment.ZSHARINGCOMPOSITION + WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0' + WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1' + WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || '' + END AS 'zMoment-Sharing Composition', + zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared', + CASE zMoment.ZPROCESSEDLOCATION + WHEN 2 THEN 'No-2' + WHEN 3 THEN 'Yes-3' + WHEN 6 THEN 'Yes-6' + ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || '' + END AS 'zMoment-Processed Location', + zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude', + zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude', + CASE zMoment.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zMoment.ZGPSHORIZONTALACCURACY + END AS 'zMoment-GPS Horizontal Accuracy', + zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count', + zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count', + zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count', + CASE zMoment.ZTRASHEDSTATE + WHEN 0 THEN 'zMoment Not In Trash-0' + WHEN 1 THEN 'zMoment In Trash-1' + ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || '' + END AS 'zMoment-Trashed State', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart', + SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context', + SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition', + DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date - datetime', + CASE SBKAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || '' + END AS 'SBKAzSugg-State', + CASE SBKAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || '' + END AS 'SBKAzSugg-Featured State', + CASE SBKAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBKAzSugg- Available Features', + CASE SBKAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBKAzSugg-Notification State', + DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date - datetime', + DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date - datetime', + DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date - datetime', + DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date - datetime', + DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date - datetime', + SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title', + SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title', + SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count', + SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count', + SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count', + CASE SBKAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || '' + END AS 'SBKAzSugg-Type', + CASE SBKAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || '' + END AS 'SBKAzSugg-Sub Type', + SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data', + SBKAzSugg.ZFEATURESDATA AS 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist', + SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version', + CASE SBKAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBKAzSugg-Cloud Local State', + CASE SBKAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBKAzSugg-Cloud Delete State', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart', + SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context', + SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition', + DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date - datetime', + CASE SBRAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || '' + END AS 'SBRAzSugg-State', + CASE SBRAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || '' + END AS 'SBRAzSugg-Featured State', + CASE SBRAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBRAzSugg- Available Features', + CASE SBRAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBRAzSugg-Notification State', + DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date - datetime', + DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date - datetime', + DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date - datetime', + DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date - datetime', + DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date - datetime', + SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title', + SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title', + SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count', + SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count', + SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count', + CASE SBRAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || '' + END AS 'SBRAzSugg-Type', + CASE SBRAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || '' + END AS 'SBRAzSugg-Sub Type', + SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data', + SBRAzSugg.ZFEATURESDATA AS 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist', + SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version', + CASE SBRAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBRAzSugg-Cloud Local State', + CASE SBRAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBRAzSugg-Cloud Delete State', + zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version', + zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value', + zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect', + zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score', + zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score', + zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score', + zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score', + zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score', + zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score', + zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', + zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', + zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', + zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', + zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', + zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', + DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date - datetime', + DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date - datetime', + zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', + zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', + zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', + zCharRecogAttr.ZCHARACTERRECOGNITIONDATA AS 'zCharRecogAttr-Character Recogition Data-HEX', + zCharRecogAttr.ZMACHINEREADABLECODEDATA AS 'zCharRecogAttr-Machine Readable Code Data-HEX', + zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes', + zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version', + zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version', + zVisualSearchAttr.ZVISUALSEARCHDATA AS 'zVisualSearchAttr-Visual Search Data-HEX', + zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version', + zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score', + zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', + zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score', + zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score', + zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score', + zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score', + zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score', + zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light', + zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score', + zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score', + zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score', + zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score', + zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score', + zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score', + zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score', + zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score', + zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score', + zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score', + zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score', + zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score', + zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score', + zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart', + zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State', + zCldRes.ZFILESIZE AS 'zCldRes-File Size', + zCldRes.ZHEIGHT AS 'zCldRes-Height', + zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available', + zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available', + zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count', + zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type', + zCldRes.ZTYPE AS 'zCldRes-Type', + zCldRes.ZWIDTH AS 'zCldRes-Width', + zCldRes.ZDATECREATED AS 'zCldRes-Date Created', + zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date', + zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date', + zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat', + zCldRes.ZFILEPATH AS 'zCldRes-File Path', + zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint', + zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID', + zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart', + zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature', + zUserFeedback.ZTYPE AS 'zUserFeedback-Type', + zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date', + zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context', + zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State', + zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State', + zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery', + zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', + zAlbumList.Z_ENT AS 'zAlbumList-zENT', + zAlbumList.Z_OPT AS 'zAlbumList-zOPT', + zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key', + zAlbumList.ZUUID AS 'zAlbumList-UUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK', + zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key', + zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key', + zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK', + zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt', + zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt', + zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID', + zAssetContrib.Z_PK AS 'zAsstContrib-zPK', + zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt', + zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt', + zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', + zAssetDes.Z_PK AS 'zAssetDes-zPK', + zAssetDes.Z_ENT AS 'zAssetDes-zENT', + zAssetDes.Z_OPT AS 'zAssetDes-zOPT', + zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK', + zEditedIPTCAttr.ZASSETATTRIBUTES AS 'zEdIPTCAttr-Asset Attributes= zAddAssetAttr.zPK', + zEditedIPTCAttr.ZACTIONADVISED AS 'zEdIPTCAttr-Action Advised', + zEditedIPTCAttr.ZAUDIODURATION AS 'zEdIPTCAttr-Audio Duration', + zEditedIPTCAttr.ZAUDIOOUTCUE AS 'zEdIPTCAttr-Audio Outcue', + zEditedIPTCAttr.ZAUDIOSAMPLINGRATE AS 'zEdIPTCAttr-Audio Sampling Rate', + zEditedIPTCAttr.ZAUDIOSAMPLINGRES AS 'zEdIPTCAttr-Audio Sampling Res', + zEditedIPTCAttr.ZAUDIOTYPE AS 'zEdIPTCAttr-Audion Type', + zEditedIPTCAttr.ZBYLINE AS 'zEdIPTCAttr-ByLine', + zEditedIPTCAttr.ZBYLINETITLE AS 'zEdIPTCAttr-ByLine Title', + zEditedIPTCAttr.ZCAPTION AS 'zEdIPTCAttr-Caption', + zEditedIPTCAttr.ZCATEGORY AS 'zEdIPTCAttr-Category', + zEditedIPTCAttr.ZCIADRCITY AS 'zEdIPTCAttr-CIADR City', + zEditedIPTCAttr.ZCIADRCTRY AS 'zEdIPTCAttr-CIADR Ctry', + zEditedIPTCAttr.ZCIADREXTADR AS 'zEdIPTCAttr-CIADR ExtAdr', + zEditedIPTCAttr.ZCIADRPCODE AS 'zEdIPTCAttr-CIADR PCode', + zEditedIPTCAttr.ZCIADRREGION AS 'zEdIPTCAttr-CIADR Region', + zEditedIPTCAttr.ZCIEMAILWORK AS 'zEdIPTCAttr-CiEmailWork', + zEditedIPTCAttr.ZCITELWORK AS 'zEdIPTCAttr-CiTeLWork', + zEditedIPTCAttr.ZCIURLWORK AS 'zEdIPTCAttr-CiURLWork', + zEditedIPTCAttr.ZCITY AS 'zEdIPTCAttr-City', + zEditedIPTCAttr.ZCONTACT AS 'zEdIPTCAttr-Contact', + zEditedIPTCAttr.ZCONTENTLOCATIONCODE AS 'zEdIPTCAttr-Content LocationCode', + zEditedIPTCAttr.ZCONTENTLOCATIONNAME AS 'zEdIPTCAttr-Content LocationName', + zEditedIPTCAttr.ZCOPYRIGHTNOTICE AS 'zEdIPTCAttr-Copy Right Notice', + zEditedIPTCAttr.ZCOUNTRYPRIMARYLOCATIONCODE AS 'zEdIPTCAttr-Cntry Primary LocationCode', + zEditedIPTCAttr.ZCOUNTRYPRIMARYLOCATIONNAME AS 'zEdIPTCAttr-Cntry Primary LocationName', + zEditedIPTCAttr.ZCREATORCONTACTINFO AS 'zEdIPTCAttr-Creator ContactInfo', + zEditedIPTCAttr.ZCREDIT AS 'zEdIPTCAttr-Credit', + zEditedIPTCAttr.ZDATECREATED AS 'zEdIPTCAttr-DateCreated-TEXT', + zEditedIPTCAttr.ZDIGITALCREATIONDATE AS 'zEdIPTCAttr-Dig Creation Date - TEXT', + zEditedIPTCAttr.ZDIGITALCREATIONTIME AS 'zEdIPTCAttr-Dig Creation Time - TEXT', + zEditedIPTCAttr.ZDIGITALSOURCETYPE AS 'zEdIPTCAttr-Dig SourceType', + zEditedIPTCAttr.ZEDITSTATUS AS 'zEdIPTCAttr-EditStatus', + zEditedIPTCAttr.ZEDITORIALUPDATE AS 'zEdIPTCAttr-EditorAL Update', + zEditedIPTCAttr.ZEXPIRATIONDATE AS 'zEdIPTCAttr-Exp Date - TEXT', + zEditedIPTCAttr.ZEXPIRATIONTIME AS 'zEdIPTCAttr-Exp Time - TEXT', + zEditedIPTCAttr.ZFIXTUREIDENTIFIER AS 'zEdIPTCAttr-Fixture ID', + zEditedIPTCAttr.ZHEADLINE AS 'zEdIPTCAttr-Headline', + zEditedIPTCAttr.ZIMAGEORIENTATION AS 'zEdIPTCAttr-Image Orientation', + zEditedIPTCAttr.ZIMAGETYPE AS 'zEdIPTCAttr-Image Type', + zEditedIPTCAttr.ZKEYWORDS AS 'zEdIPTCAttr-Keywords', + zEditedIPTCAttr.ZLANGUAGEIDENTIFIER AS 'zEdIPTCAttr-Language ID', + zEditedIPTCAttr.ZOBJECTATTRIBUTEREFERENCE AS 'zEdIPTCAttr-Obj Attr Reference', + zEditedIPTCAttr.ZOBJECTCYCLE AS 'zEdIPTCAttr-Obj Cycle', + zEditedIPTCAttr.ZOBJECTNAME AS 'zEdIPTCAttr-Obj Name', + zEditedIPTCAttr.ZOBJECTTYPEREFERENCE AS 'zEdIPTCAttr-Obj Type Ref', + zEditedIPTCAttr.ZORIGINALTRANSMISSIONREFERENCE AS 'zEdIPTCAttr-Org Transmission Ref', + zEditedIPTCAttr.ZORIGINATINGPROGRAM AS 'zEdIPTCAttr-Orginating Program', + zEditedIPTCAttr.ZPROGRAMVERSION AS 'zEdIPTCAttr-Program Version', + zEditedIPTCAttr.ZPROVINCESTATE AS 'zEdIPTCAttr-Province State', + zEditedIPTCAttr.ZREFERENCEDATE AS 'zEdIPTCAttr-RefDate - TEXT', + zEditedIPTCAttr.ZREFERENCENUMBER AS 'zEdIPTCAttr-RefNumber', + zEditedIPTCAttr.ZREFERENCESERVICE AS 'zEdIPTCAttr-RefService', + zEditedIPTCAttr.ZRELEASEDATE AS 'zEdIPTCAttr-Release Date - TEXT', + zEditedIPTCAttr.ZRELEASETIME AS 'zEdIPTCAttr-Release Time - TEXT', + zEditedIPTCAttr.ZSCENE AS 'zEdIPTCAttr-Scene', + zEditedIPTCAttr.ZSOURCE AS 'zEdIPTCAttr-Source', + zEditedIPTCAttr.ZSPECIALINSTRUCTIONS AS 'zEdIPTCAttr-Spec Instructions', + zEditedIPTCAttr.ZSTARRATING AS 'zEdIPTCAttr-Star Rating', + zEditedIPTCAttr.ZSUBLOCATION AS 'zEdIPTCAttr-SubLocation', + zEditedIPTCAttr.ZSUBJECTREFERENCE AS 'zEdIPTCAttr-Subject Ref', + zEditedIPTCAttr.ZSUPPLEMENTALCATEGORY AS 'zEdIPTCAttr-Supplemental Category', + zEditedIPTCAttr.ZTIMECREATED AS 'zEdIPTCAttr-Time Created - TEXT', + zEditedIPTCAttr.ZURGENCY AS 'zEdIPTCAttr-Urgency', + zEditedIPTCAttr.ZUSAGETERMS AS 'zEdIPTCAttr-Usage Terms', + zEditedIPTCAttr.ZWRITEREDITOR AS 'zEdIPTCAttr-Writer Editor', + zEditedIPTCAttr.ZDATA AS 'zEdIPTCAttr-Data - BLOB', + zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK', + zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT', + zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT', + zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zCldRes.Z_PK AS 'zCldRes-zPK', + zCldRes.Z_ENT AS 'zCldRes-zENT', + zCldRes.Z_OPT AS 'zCldRes-zOPT', + zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK', + zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID', + zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK', + zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt', + zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt', + zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key', + zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK', + zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', + zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', + zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zDetFace.Z_PK AS 'zDetFace-zPK', + zDetFace.Z_ENT AS 'zDetFace-zEnt', + zDetFace.Z_OPT AS 'zDetFace.zOpt', + zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face', + zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK', + zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face', + zDetFace.ZFACEPRINT AS 'zDetFace-Face Print', + zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK', + zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK', + zDetFace.ZUUID AS 'zDetFace-UUID', + zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK', + zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT', + zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT', + zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK', + zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID', + zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK', + zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt', + zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt', + zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zEditedIPTCAttr.Z_PK AS 'zEdIPTCAttr-zPK', + zEditedIPTCAttr.Z_ENT AS 'zEdIPTCAttr-zENT', + zEditedIPTCAttr.Z_OPT AS 'zEdIPTCAttr-zOPT', + zFaceCrop.Z_PK AS 'zFaceCrop-zPK', + zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt', + zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt', + zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID', + zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key', + zFaceCrop.ZFACE AS 'zFaceCrop-Face Key', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID', + zGenAlbum.Z_PK AS 'zGenAlbum-zPK=32AlbumLists= 32Albums', + zGenAlbum.Z_ENT AS 'zGenAlbum-zENT', + zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt', + zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset', + zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK', + zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder', + zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK', + zMemory.Z_PK AS 'zMemory-zPK', + zMemory.Z_ENT AS 'zMemory-zENT', + zMemory.Z_OPT AS 'zMemory-zOPT', + zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK', + zMemory.ZUUID AS 'zMemory-UUID', + zMoment.Z_PK AS 'zMoment-zPK', + zMoment.Z_ENT AS 'zMoment-zENT', + zMoment.Z_OPT AS 'zMoment-zOPT', + zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key', + zMoment.ZUUID AS 'zMoment-UUID', + zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person', + zPerson.Z_ENT AS 'zPerson-zEnt', + zPerson.Z_OPT AS 'zPerson-zOpt', + zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK', + zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', + zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', + zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', + zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', + zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', + zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK', + zSceneP.Z_PK AS 'zSceneP-zPK', + zSceneP.Z_ENT AS 'zSceneP-zENT', + zSceneP.Z_OPT AS 'zSceneP-zOPT', + zShare.Z_PK AS 'zShare-zPK', + zShare.Z_ENT AS 'zShare-zENT', + zShare.Z_OPT AS 'zShare-zOPT', + zShare.ZUUID AS 'zShare-UUID', + SPLzShare.ZUUID AS 'SPLzShare-UUID', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.Z_ENT AS 'zSharePartic-zENT', + zSharePartic.Z_OPT AS 'zSharePartic-zOPT', + zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK', + zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK', + SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT', + SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID', + SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK', + SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT', + SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', + z3SuggBRA.Z_3REPRESENTATIVESUGGESTIONASSETS AS 'z3SuggBRA-3RepAssets', + z3SuggBRA.Z_71SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-71SuggBeingRepAssets', + z3SuggBKA.Z_71SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-71SuggBeingKeyAssets= zSugg-zPK', + z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK', + zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', + zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', + zUnmAdj.Z_ENT AS 'zUnmAdj-zENT', + zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint', + zUserFeedback.Z_PK AS 'zUserFeedback-zPK', + zUserFeedback.Z_ENT AS 'zUserFeedback-zENT', + zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT', + zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK', + zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID', + zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK', + zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', + zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', + zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + z32AlbumLists.Z_32ALBUMS AS 'z32AlbumList-32Albums= zGenAlbum-zPK', + z32AlbumLists.Z_2ALBUMLISTS AS 'z32AlbumList-Album List Key', + z32AlbumLists.Z_FOK_32ALBUMS AS 'z32AlbumList-FOK32Albums Key', + z33Assets.Z_33ALBUMS AS 'z33Assets-33Albums= zGenAlbum-zPK', + z33Assets.Z_3ASSETS AS 'z33Assets-3Asset Key= zAsset-zPK in the Album', + z33Assets.Z_FOK_3ASSETS AS 'z33Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_56MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-56memoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', + z3MemoryBECAs.Z_56MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-56MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', + z3MemoryBRAs.Z_56MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-56RepresentativeAssets= zMemory-zPK', + z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', + z3MemoryBUCAs.Z_56MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-56MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_56MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-56Memories Being Custom User Assets', + z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', + z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZEDITEDIPTCATTRIBUTES zEditedIPTCAttr ON zEditedIPTCAttr.Z_PK = zAddAssetAttr.ZEDITEDIPTCATTRIBUTES + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS + LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK + LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK + LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES + LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK + LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE + LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE + LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK + LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON + LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP + LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_56MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_56MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_56MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_56MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_56MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_56MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK + LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT + LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_71SUGGESTIONSBEINGKEYASSETS + LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVESUGGESTIONASSETS = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_71SUGGESTIONSBEINGREPRESENTATIVEASSETS + ORDER BY zAsset.ZADDEDDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], + row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], + row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], + row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], + row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], + row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], + row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], + row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], + row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], + row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], + row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], + row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], + row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], + row[1248], row[1249], row[1250], row[1251], row[1252], row[1253])) + + data_headers = ('zAsset Complete-0', + 'zAsset-zPK-4QueryStart-1', + 'zAddAssetAttr-zPK-4QueryStart-2', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', + 'zAddAssetAttr-Original Stable Hash-4QueryStart-4', + 'zIntResou-Fingerprint-4QueryStart-5', + 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6', + 'zIntResou-Stable Hash-4QueryStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zExtAttr-Generative_AI_Type-21', + 'zExtAttr-Credit-22', + 'zAsset-Derived Camera Capture Device-23', + 'zAsset-Capture_Session_Identifier-24', + 'zAddAssetAttr-Camera Captured Device-25', + 'zAddAssetAttr-Imported by-26', + 'zCldMast-Imported By-27', + 'zAddAssetAttr.Imported by Bundle Identifier-28', + 'zAddAssetAttr-Imported By Display Name-29', + 'zCldMast-Imported by Bundle ID-30', + 'zCldMast-Imported by Display Name-31', + 'zAsset-ImageRequestHints-HEX-Path-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Is_Recently_Saved-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State -4QueryStart-40', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', + ('zAsset-Added Date - datetime-44', 'datetime'), + ('zAsset- SortToken -CameraRoll - datetime-45', 'datetime'), + 'zAddAssetAttr-Date Created Source-46', + ('zAsset-Date Created - datetime-47', 'datetime'), + ('zCldMast-Creation Date - datetime-48', 'datetime'), + ('zIntResou-CldMst Date Created - datetime-49', 'datetime'), + 'zAddAssetAttr-Time Zone Name-50', + 'zAddAssetAttr-Time Zone Offset-51', + 'zAddAssetAttr-Inferred Time Zone Offset-52', + 'zAddAssetAttr-EXIF-String-53', + ('zAsset-Modification Date - datetime-54', 'datetime'), + ('zAddAssetAttr-Last Viewed Date - datetime-55', 'datetime'), + ('zAsset-Last Shared Date - datetime-56', 'datetime'), + 'zCldMast-Cloud Local State-57', + ('zCldMast-Import Date - datetime-58', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files - datetime-59', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-60', + ('zAddAssetAttr-Alt Import Image Date - datetime-61', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', + ('zAsset-Cloud Batch Publish Date - datetime-63', 'datetime'), + ('zAsset-Cloud Server Publish Date - datetime-64', 'datetime'), + 'zAsset-Cloud Download Requests-65', + 'zAsset-Cloud Batch ID-66', + 'zAddAssetAttr-Upload Attempts-67', + 'zAsset-Latitude-68', + 'zExtAttr-Latitude-69', + 'zAsset-Longitude-70', + 'zExtAttr-Longitude-71', + 'zAddAssetAttr-GPS Horizontal Accuracy-72', + 'zAddAssetAttr-Location Hash-73', + 'zAsset-Location Data-HEX-74', + 'zAddAssetAttr-Reverse Location Is Valid-75', + 'zAddAssetAttr-Reverse Location Data-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'ParentzGenAlbum-UUID-4QueryStart-79', + 'zGenAlbum-UUID-4QueryStart-80', + 'SWYConverszGenAlbum-UUID-4QueryStart-81', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', + 'zGenAlbum-Cloud GUID-4QueryStart-83', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', + 'zGenAlbum-Project Render UUID-4QueryStart-87', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', + 'zGenAlbum-Cloud_Local_State-4QueryStart-90', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', + ('ParentzGenAlbum- Creation Date- 4QueryStart - datetime-92', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart - datetime-93', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart - datetime-94', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart - datetime-95', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart - datetime-96', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart - datetime-97', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart - datetime-98', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart - datetime-99', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart - datetime-100', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart - datetime-101', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart - datetime-102', 'datetime'), + ('zShare-Cloud Subscription Date-CMM- 4QueryStart - datetime-103', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL- 4QueryStart - datetime-104', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-105', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-106', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-107', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-108', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-109', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-110', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-111', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-112', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-113', + 'zGenAlbum-zENT- Entity- 4QueryStart-114', + 'ParentzGenAlbum- Kind- 4QueryStart-115', + 'zGenAlbum-Album Kind- 4QueryStart-116', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-117', + 'AAAzCldMastMedData-zOPT-4TableStart-118', + 'zAddAssetAttr-Media Metadata Type-119', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-120', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-121', + 'AAAzCldMastMedData-Data-HEX-122', + 'CldMasterzCldMastMedData-zOPT-4TableStart-123', + 'zCldMast-Media Metadata Type-124', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-125', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-126', + 'CMzCldMastMedData-Data-HEX-127', + 'zAsset-Search Index Rebuild State-128', + 'zAddAssetAttr-Syndication History-129', + 'zMedAnlyAstAttr-Syndication Processing Version-130', + 'zMedAnlyAstAttr-Syndication Processing Value-131', + 'zAsset-Orientation-132', + 'zAddAssetAttr-Original Orientation-133', + 'zAsset-Kind-134', + 'zAsset-Is_Detected_Screenshot-135', + 'zAsset-Kind-Sub-Type-136', + 'zAddAssetAttr-Cloud Kind Sub Type-137', + 'zAsset-Playback Style-138', + 'zAsset-Playback Variation-139', + 'zAddAssetAttr.View_Presentation-140', + 'zAsset-Video Duration-141', + 'zExtAttr-Duration-142', + 'zAsset-Video CP Duration-143', + 'zAddAssetAttr-Video CP Duration Time Scale-144', + 'zAsset-Video CP Visibility State-145', + 'zAddAssetAttr-Video CP Display Value-146', + 'zAddAssetAttr-Video CP Display Time Scale-147', + 'zIntResou-Datastore Class ID-148', + 'zIntResou-Local Availability-149', + 'zIntResou-Local Availability Target-150', + 'zIntResou-Cloud Local State-151', + 'zIntResou-Remote Availability-152', + 'zIntResou-Remote Availability Target-153', + 'zIntResou-Side Car Index-154', + 'zAsset-UUID = store.cloudphotodb-4TableStart-155', + 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156', + 'zIntResou-Fingerprint-4TableStart-157', + 'zIntResou-Stable Hash-4TableStart-158', + 'zIntResou- File ID-159', + 'zIntResou-Version-160', + 'zAddAssetAttr- Original-File-Size-161', + 'zIntResou-Resource Type-162', + 'zIntResou-DataStoreKeyData-HEX-163', + 'zIntResou-Datastore Sub-Type-164', + 'zIntResou-Cloud Source Type-165', + 'zIntResou-Data Length-166', + 'zIntResou-Recipe ID-167', + ('zIntResou-Cloud Last Prefetch Date - datetime-168', 'datetime'), + 'zIntResou-Cloud Prefetch Count-169', + ('zIntResou- Cloud-Last-OnDemand Download-Date - datetime-170', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', + 'zIntResou-Compact-UTI-172', + 'zAsset-Uniform Type ID-173', + 'zAsset-Original Color Space-174', + 'zCldMast-Uniform_Type_ID-175', + 'zCldMast-Full Size JPEG Source-176', + 'zAsset-HDR Gain-177', + 'zAsset-zHDR_Type-178', + 'zExtAttr-Codec-179', + 'zIntResou-Codec Four Char Code Name-180', + 'zCldMast-Codec Name-181', + 'zCldMast-Video Frame Rate-182', + 'zCldMast-Placeholder State-183', + 'zAsset-Depth_Type-184', + 'zAsset-Avalanche UUID-4TableStart-185', + 'zAsset-Avalanche_Kind-186', + 'zAsset-Avalanche_Pick_Type-BurstAsset-187', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', + 'zAddAssetAttr-Cloud Recovery State-189', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', + 'zAsset-Deferred Processing Needed-191', + 'zAsset-Video Deferred Processing Needed-192', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', + 'zAddAssetAttr-Deferred Processing Candidate Options-194', + 'zAsset-Adjustments_State-Camera-Effects-Filters-195', + 'zUnmAdj-UUID-4TableStart-196', + 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197', + 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200', + ('zAsset-Adjustment Timestamp - datetime-201', 'datetime'), + ('zUnmAdj-Adjustment Timestamp - datetime-202', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date - datetime-203', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-204', + 'zUnmAdj-Editor Localized Name-205', + 'zUnmAdj-Adjustment Format ID-206', + 'zAddAssetAttr-Montage-207', + 'zUnmAdj-Adjustment Render Types-208', + 'zUnmAdj-Adjustment Format Version-209', + 'zUnmAdj-Adjustment Base Image Format-210', + 'zCompSyncAttr-Local_Analysis_Stage-211', + 'zCompSyncAttr-Cloud_Compute_State_Version-212', + 'zCompSyncAttr-Local_Analysis_Major_Version-213', + 'zAsset-Favorite-214', + 'zAsset-Hidden-215', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', + ('zAsset-Trashed Date - datetime-217', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', + 'zAsset-Delete-Reason-219', + 'zIntResou-Trash State-220', + ('zIntResou-Trashed Date - datetime-221', 'datetime'), + 'zAsset-Cloud Delete State-222', + 'zIntResou-Cloud Delete State-223', + 'zAddAssetAttr-PTP Trashed State-224', + 'zIntResou-PTP Trashed State-225', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', + ('zMedAnlyAstAttr-Media Analysis Timestamp - datetime-227', 'datetime'), + ('zAsset-Analysis State Modificaion Date - datetime-228', 'datetime'), + 'zAddAssetAttr- Pending View Count-229', + 'zAddAssetAttr- View Count-230', + 'zAddAssetAttr- Pending Play Count-231', + 'zAddAssetAttr- Play Count-232', + 'zAddAssetAttr- Pending Share Count-233', + 'zAddAssetAttr- Share Count-234', + 'zAddAssetAttr-Allowed for Analysis-235', + 'zAddAssetAttr-Scene Analysis Version-236', + 'zAddAssetAttr-Scene Analysis is From Preview-237', + ('zAddAssetAttr-Scene Analysis Timestamp - datetime-238', 'datetime'), + 'zAsset-Duplication Asset Visibility State-239', + 'zAddAssetAttr-Destination Asset Copy State-240', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', + 'zSceneP-Data-HEX NSKeyed Plist-242', + 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', + 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', + 'zCldMast-Source Master For Duplication Scope ID-246', + 'zAddAssetAttr-Source Asset For Duplication ID-247', + 'zCldMast-Source Master for Duplication ID-248', + 'zAddAssetAttr-Variation Suggestions States-249', + 'zAsset-High Frame Rate State-250', + 'zAsset-Video Key Frame Time Scale-251', + 'zAsset-Video Key Frame Value-252', + 'zAsset-Current_Sleet_Cast-253', + 'zAddAssetAttr.Sleet_Is_Reversible-254', + 'zExtAttr-Sleet_Rendering_Version-255', + 'zExtAttr-Sleet_Intensity-256', + 'zExtAttr-Sleet_Tone_Bias-257', + 'zExtAttr-Sleet_Color_Bias-258', + 'zExtAttr-Sleet_Cast-259', + 'zExtAttr-ISO-260', + 'zExtAttr-Metering Mode-261', + 'zExtAttr-Sample Rate-262', + 'zExtAttr-Track Format-263', + 'zExtAttr-White Balance-264', + 'zExtAttr-Aperture-265', + 'zExtAttr-BitRate-266', + 'zExtAttr-Exposure Bias-267', + 'zExtAttr-Frames Per Second-268', + 'zExtAttr-Shutter Speed-269', + 'zExtAttr-Slush Scene Bias-270', + 'zExtAttr-Slush Version-271', + 'zExtAttr-Slush Preset-272', + 'zExtAttr-Slush Warm Bias-273', + 'zAsset-Height-274', + 'zAddAssetAttr-Original Height-275', + 'zIntResou-Unoriented Height-276', + 'zAsset-Width-277', + 'zAddAssetAttr-Original Width-278', + 'zIntResou-Unoriented Width-279', + 'zShare-Thumbnail Image Data-280', + 'SPLzShare-Thumbnail Image Data-281', + 'zAsset-Thumbnail Index-282', + 'zAddAssetAttr-Embedded Thumbnail Height-283', + 'zAddAssetAttr-Embedded Thumbnail Length-284', + 'zAddAssetAttr-Embedded Thumbnail Offset-285', + 'zAddAssetAttr-Embedded Thumbnail Width-286', + 'zAsset-Packed Acceptable Crop Rect-287', + 'zAsset-Packed Badge Attributes-288', + 'zAsset-Packed Preferred Crop Rect-289', + 'zAsset-Curation Score-290', + 'zAsset-Camera Processing Adjustment State-291', + 'zAsset-Depth Type-292', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293', + 'zAddAssetAttr-Orig Resource Choice-294', + 'zAsset-Spatial Type-295', + 'zAddAssetAttr-Spatial Over Capture Group ID-296', + 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297', + 'zAddAssetAttr-Original Hash-HEX-298', + 'zAddAssetAttr-Place Annotation Data-299', + 'zAddAssetAttr-Distance Identity-300', + 'zAddAssetAttr-Edited IPTC Attributes-301', + 'zAssetDes-Long Description-302', + 'zAddAssetAttr-Asset Description-303', + 'zAddAssetAttr-Title-Comments via Cloud Website-304', + 'zAddAssetAttr-Accessibility Description-305', + 'zAddAssetAttr-Photo Stream Tag ID-306', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp - datetime-308', 'datetime'), + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309', + ('zCldFeedEnt-Entry Date - datetime-310', 'datetime'), + 'zCldFeedEnt-Entry_Is_Mine-311', + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314', + 'zCldFeedEnt-Entry Priority Number-315', + 'zCldFeedEnt-Entry Type-316', + 'zCldSharedComment-Cloud GUID-4TableStart-317', + ('zCldSharedComment-Date - datetime-318', 'datetime'), + ('zCldSharedComment-Comment Client Date - datetime-319', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date - datetime-320', 'datetime'), + 'zCldSharedComment-Type-321', + 'zCldSharedComment-Comment Text-322', + 'zCldSharedComment-Commenter Hashed Person ID-323', + 'zCldSharedComment-Batch Comment-324', + 'zCldSharedComment-Is a Caption-325', + 'zAsset-Cloud Has Comments by Me-326', + 'zCldSharedComment-Is My Comment-327', + 'zCldSharedComment-Is Deletable-328', + 'zAsset-Cloud Has Comments Conversation-329', + 'zAsset-Cloud Has Unseen Comments-330', + 'zCldSharedComment-Liked-331', + 'zAddAssetAttr-Share Type-332', + 'zAsset-Library Scope Share State- StillTesting-333', + 'zAsset-Active Library Scope Participation State-334', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-335', + 'zShare-UUID-CMM-4TableStart-336', + 'SPLzShare-UUID-SPL-4TableStart-337', + 'zShare-zENT-CMM-338', + 'SPLzShare-zENT-SPL-339', + 'zSharePartic-z66SHARE-340', + 'SPLzSharePartic-z66SHARE-341', + 'zShare-Status-CMM-342', + 'zShare-Status-SPL-343', + 'zShare-Scope Type-CMM-344', + 'zShare-Scope Type-SPL-345', + 'zShare-Local Publish State-CMM-346', + 'SPLzShare-Local Publish State-SPL-347', + 'zShare-Public Permission-CMM-348', + 'SPLzShare-Public Permission-SPL-349', + 'zShare-Allows Access Requests-CMM-350', + 'SPLzShare-Allows Access Requests-SPL-351', + 'zShare-CollectionShare CurrentUser ContribState-CMM-352', + 'SPLzShare-CollectionShare CurrentUser ContribState-SPL-353', + 'zShare-CollectionShare ExpiringState-CMM-354', + 'SPLzShare-CollectionShare ExpiringState-SPL-355', + 'zShare-CollectionShare Kind-CMM-356', + 'SPLzShare-CollectionShare Kind-SPL-357', + 'zShare-Creation Type-CMM-358', + 'SPLzShare-Creation Type-SPL-359', + 'zShare-Originating Scope ID-CMM-360', + 'SPLzShare-Originating Scope ID-SPL-361', + 'zShare-Scope ID-CMM-362', + 'SPLzShare-Scope ID-SPL-363', + 'zShare-Title-CMM-364', + 'SPLzShare-Title-SPL-365', + 'zShare-Share URL-CMM-366', + 'SPLzShare-Share URL-SPL-367', + 'zShare-Client BundleID-CMM-368', + 'SPLzShare-Client BundleID-SPL-369', + ('zShare-Creation Date-CMM - datetime-370', 'datetime'), + ('SPLzShare-Creation Date-SPL - datetime-371', 'datetime'), + ('zShare-Start Date-CMM - datetime-372', 'datetime'), + ('SPLzShare-Start Date-SPL - datetime-373', 'datetime'), + ('zShare-Cloud Subscription Date-CMM- 4zShare - datetime-374', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL- 4zShare - datetime-375', 'datetime'), + ('zShare-End Date-CMM - datetime-376', 'datetime'), + ('SPLzShare-End Date-SPL - datetime-377', 'datetime'), + ('zShare-Expiry Date-CMM - datetime-378', 'datetime'), + ('SPLzShare-Expiry Date-SPL - datetime-379', 'datetime'), + ('zShare-Last Modified Date-CMM - datetime-380', 'datetime'), + ('SPLzShare-Last Modified Date-SPL - datetime-381', 'datetime'), + 'zShare-Cloud Item Count-CMM-382', + 'SPLzShare-Cloud Item Count-SPL-383', + 'zShare-Asset Count-CMM-384', + 'SPLzShare-Asset Count-SPL-385', + 'zShare-Cloud Photo Count-CMM-386', + 'SPLzShare-Cloud Photo Count-SPL-387', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-388', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-389', + 'zShare-Photos Count-CMM-390', + 'SPLzShare-Photos Count-CMM-SPL-391', + 'zShare-Cloud Video Count-CMM-392', + 'SPLzShare-Cloud Video Count-SPL-393', + 'zShare-Videos Count-CMM-394', + 'SPLzShare-Videos Count-SPL-395', + 'zShare-Unseen Assets Count-CMM-396', + 'SPLzShare-Unseen Assets Count-SPL-397', + 'zShare-Unseen Content State-CMM-398', + 'SPLzShare-Unseen Content State-SPL-399', + 'zShare-Force Sync Attempted-CMM-400', + 'SPLzShare-Force Sync Attempted-SPL-401', + 'zShare-Cloud Local State-CMM-402', + 'SPLzShare-Cloud Local State-SPL-403', + 'zShare-Scope Syncing State-CMM-404', + 'SPLzShare-Scope Syncing State-SPL-405', + 'zShare-Scope Syncing State1-CMM-406', + 'SPLzShare-Scope Syncing State1-SPL-407', + 'zShare-Auto Share Policy-CMM-408', + 'SPLzShare-Auto Share Policy-SPL-409', + 'zShare-Should Notify On Upload Completion-CMM-410', + 'SPLzShare-Should Notify On Upload Completion-SPL-411', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-412', + 'zShare-Trashed State-CMM-413', + 'SPLzShare-Trashed State-SPL-414', + 'zShare-Cloud Delete State-CMM-415', + 'SPLzShare-Cloud Delete State-SPL-416', + ('zShare-Trashed Date-CMM - datetime-417', 'datetime'), + ('SPLzShare-Trashed Date-SPL - datetime-418', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM - datetime-419', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL - datetime-420', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM - datetime-421', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL - datetime-422', 'datetime'), + 'zShare-Exit Source-CMM-423', + 'SPLzShare-Exit Source-SPL-424', + 'zShare-SPL_Exit State-CMM-425', + 'SPLzShare-SPL_Exit State-SPL-426', + 'zShare-Exit Type-CMM-427', + 'SPLzShare-Exit Type-SPL-428', + 'zShare-Should Ignor Budgets-CMM-429', + 'SPLzShare-Should Ignor Budgets-SPL-430', + 'zShare-Preview State-CMM-431', + 'SPLzShare-Preview State-SPL-432', + 'zShare-Phone Invitation Token-CMM-433', + 'SPLzShare-Phone Invitation Token-SPL-434', + 'zShare-CK Share Data-CMM-435', + 'SPLzShare-CK Share Data-SPL-436', + 'zShare-Preview Data-CMM-437', + 'SPLzShare-Preview Data-SPL-438', + 'zShare-Rules-CMM-439', + 'SPLzShare-Rules-SPL-440', + 'zShare-Thumbnail Image Data-CMM-441', + 'SPLzShare-Thumbnail Image Data-SPL-442', + 'zShare-Participant Cloud Update State-CMM-443', + 'SPLzShare-Participant Cloud Update State-SPL-444', + 'zSharePartic-UUID-4TableStart-445', + 'SPLzSharePartic-UUID-4TableStart-446', + 'zSharePartic-Acceptance Status-447', + 'SPLzSharePartic-Acceptance Status-448', + 'zSharePartic-Is Current User-449', + 'SPLzSharePartic-Is Current User-450', + 'zSharePartic-Role-451', + 'SPLzSharePartic-Role-452', + 'zSharePartic-Premission-453', + 'SPLzSharePartic-Premission-454', + 'zSharePartic-Participant ID-455', + 'SPLzSharePartic-Participant ID-456', + 'zSharePartic-User ID-457', + 'SPLzSharePartic-User ID-458', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-459', + 'SPLzSharePartic-zPK-4TableStart-460', + 'zSharePartic-zPK-4TableStart-461', + 'zSharePartic-Email Address-462', + 'SPLzSharePartic-Email Address-463', + 'zSharePartic-Phone Number-464', + 'SPLzSharePartic-Phone Number-465', + 'zSharePartic-Name Components-466', + 'SPLzSharePartic-Name Components-467', + 'zSharePartic-Exit State-468', + 'SPLzSharePartic-Exit State-469', + 'ParentzGenAlbum-UUID-4TableStart-470', + 'zGenAlbum-UUID-4TableStart-471', + 'SWYConverszGenAlbum-UUID-4TableStart-472', + 'ParentzGenAlbum-Cloud GUID-4TableStart-473', + 'zGenAlbum-Cloud GUID-4TableStart-474', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-475', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-476', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-477', + 'zGenAlbum-Project Render UUID-4TableStart-478', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-479', + 'zAlbumList-Needs Reordering Number-480', + 'zGenAlbum-zENT- Entity-481', + 'ParentzGenAlbum-Kind-482', + 'zGenAlbum-Album Kind-483', + 'SWYConverszGenAlbum-Album Kind-484', + 'ParentzGenAlbum-Cloud-Local-State-485', + 'zGenAlbum-Cloud_Local_State-486', + 'SWYConverszGenAlbum-Cloud_Local_State-487', + 'ParentzGenAlbum- Title-488', + 'zGenAlbum- Title-User&System Applied-489', + 'SWYConverszGenAlbum- Title -User&System Applied-490', + 'zGenAlbum-Import Session ID-SWY-491', + 'zAsset- Conversation= zGenAlbum_zPK-492', + 'SWYConverszGenAlbum- Import Session ID-SWY-493', + 'zGenAlbum-Imported by Bundle Identifier-494', + 'SWYzGenAlbum-Imported by Bundle Identifier-495', + 'SWYConverszGenAlbum- Syndicate-496', + ('ParentzGenAlbum-Creation Date - datetime-497', 'datetime'), + ('zGenAlbum-Creation Date - datetime-498', 'datetime'), + ('SWYConverszGenAlbum-Creation Date - datetime-499', 'datetime'), + ('zGenAlbum-Cloud Creation Date - datetime-500', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date - datetime-501', 'datetime'), + ('zGenAlbum-Start Date - datetime-502', 'datetime'), + ('SWYConverszGenAlbum-Start Date - datetime-503', 'datetime'), + ('zGenAlbum-End Date - datetime-504', 'datetime'), + ('SWYConverszGenAlbum-End Date - datetime-505', 'datetime'), + ('zGenAlbum-Cloud Subscription Date - datetime-506', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date - datetime-507', 'datetime'), + ('zShare-Cloud Subscription Date-CMM - datetime-508', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL - datetime-509', 'datetime'), + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-510', + 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-511', + 'ParentzGenAlbum-Pending Items Count-512', + 'zGenAlbum-Pending Items Count-513', + 'SWYConverszGenAlbum-Pending Items Count-514', + 'ParentzGenAlbum-Pending Items Type-515', + 'zGenAlbum-Pending Items Type-516', + 'SWYConverszGenAlbum-Pending Items Type-517', + 'zGenAlbum- Cached Photos Count-518', + 'SWYConverszGenAlbum- Cached Photos Count-519', + 'zGenAlbum- Cached Videos Count-520', + 'SWYConverszGenAlbum- Cached Videos Count-521', + 'zGenAlbum- Cached Count-522', + 'SWYConverszGenAlbum- Cached Count-523', + 'ParentzGenAlbum-Sync Event Order Key-524', + 'zGenAlbum-Sync Event Order Key-525', + 'SWYConverszGenAlbum-Sync Event Order Key-526', + 'zGenAlbum-Has Unseen Content-527', + 'SWYConverszGenAlbum-Has Unseen Content-528', + 'zGenAlbum-Unseen Asset Count-529', + 'SWYConverszGenAlbum-Unseen Asset Count-530', + 'zGenAlbum-is Owned-531', + 'SWYConverszGenAlbum-is Owned-532', + 'zGenAlbum-Cloud Relationship State-533', + 'SWYConverszGenAlbum-Cloud Relationship State-534', + 'zGenAlbum-Cloud Relationship State Local-535', + 'SWYConverszGenAlbum-Cloud Relationship State Local-536', + 'zGenAlbum-Cloud Owner Mail Key-537', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-538', + 'zGenAlbum-Cloud Owner Frist Name-539', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-540', + 'zGenAlbum-Cloud Owner Last Name-541', + 'SWYConverszGenAlbum-Cloud Owner Last Name-542', + 'zGenAlbum-Cloud Owner Full Name-543', + 'SWYConverszGenAlbum-Cloud Owner Full Name-544', + 'zGenAlbum-Cloud Person ID-545', + 'SWYConverszGenAlbum-Cloud Person ID-546', + 'zShare-Cloud Person ID-CMM-547', + 'SPLzShare-Cloud Person ID-SPL-548', + 'zAsset-Cloud Owner Hashed Person ID-549', + 'zGenAlbum-Cloud Owner Hashed Person ID-550', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-551', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-552', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-553', + 'zGenAlbum-Cloud Multi-Contributors Enabled-554', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-555', + 'zGenAlbum-Cloud Album Sub Type-556', + 'SWYConverszGenAlbum-Cloud Album Sub Type-557', + ('zGenAlbum-Cloud Contribution Date - datetime-558', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date - datetime-559', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date - datetime-560', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date - datetime-561', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-562', + 'SWYConverszGenAlbum-Cloud Notification Enabled-563', + 'ParentzGenAlbum-Pinned-564', + 'zGenAlbum-Pinned-565', + 'SWYConverszGenAlbum-Pinned-566', + 'ParentzGenAlbum-Custom Sort Key-567', + 'zGenAlbum-Custom Sort Key-568', + 'SWYConverszGenAlbum-Custom Sort Key-569', + 'ParentzGenAlbum-Custom Sort Ascending-570', + 'zGenAlbum-Custom Sort Ascending-571', + 'SWYConverszGenAlbum-Custom Sort Ascending-572', + 'ParentzGenAlbum-Is Prototype-573', + 'zGenAlbum-Is Prototype-574', + 'SWYConverszGenAlbum-Is Prototype-575', + 'ParentzGenAlbum-Project Document Type-576', + 'zGenAlbum-Project Document Type-577', + 'SWYConverszGenAlbum-Project Document Type-578', + 'ParentzGenAlbum-Custom Query Type-579', + 'zGenAlbum-Custom Query Type-580', + 'SWYConverszGenAlbum-Custom Query Type-581', + 'ParentzGenAlbum-Trashed State-582', + ('ParentzGenAlbum-Trash Date - datetime-583', 'datetime'), + 'zGenAlbum-Trashed State-584', + ('zGenAlbum-Trash Date - datetime-585', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-586', + ('SWYConverszGenAlbum-Trash Date - datetime-587', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-588', + 'zGenAlbum-Cloud Delete State-589', + 'SWYConverszGenAlbum-Cloud Delete State-590', + 'zGenAlbum-Cloud Owner Whitelisted-591', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-592', + 'zGenAlbum-Cloud Local Public URL Enabled-593', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-594', + 'zGenAlbum-Cloud Public URL Enabled-595', + 'zGenAlbum-Public URL-596', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-597', + 'SWYConverszGenAlbum-Public URL-598', + 'zGenAlbum-Key Asset Face Thumb Index-599', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-600', + 'zGenAlbum-Project Text Extension ID-601', + 'SWYConverszGenAlbum-Project Text Extension ID-602', + 'zGenAlbum-User Query Data-603', + 'SWYConverszGenAlbum-User Query Data-604', + 'zGenAlbum-Custom Query Parameters-605', + 'SWYConverszGenAlbum-Custom Query Parameters-606', + 'zGenAlbum-Project Data-607', + 'SWYConverszGenAlbum-Project Data-608', + 'zGenAlbum-Search Index Rebuild State-609', + 'SWYConverszGenAlbum-Search Index Rebuild State-610', + 'zGenAlbum-Duplicate Type-611', + 'SWYConverszGenAlbum-Duplicate Type-612', + 'zGenAlbum-Privacy State-613', + 'SWYConverszGenAlbum-Privacy State-614', + 'zCldShareAlbumInvRec-zUUID-4TableStart-615', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-616', + 'zCldShareAlbumInvRec-Invitation State Local-617', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-618', + ('zCldShareAlbumInvRec-Subscription Date - datetime-619', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-620', + 'zCldShareAlbumInvRec-Invitee Last Name-621', + 'zCldShareAlbumInvRec-Invitee Full Name-622', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-623', + 'zCldShareAlbumInvRec-Invitee Email Key-624', + 'zGenAlbum-Key Asset Face ID-625', + 'zFaceCrop-Face Area Points-626', + 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-627', + 'zAsset-Face Adjustment Version-628', + 'zAddAssetAttr-Face Regions HEX-629', + 'zAddAssetAttr-Face Analysis Version-630', + 'zDetFace-Asset Visible-631', + 'zDetFacePrint-Data HEX-632', + 'zPerson-Contact Matching Dictionary HEX-633', + 'zPerson-Face Count-634', + 'zDetFace-Face Crop-635', + 'zDetFace-Face Algorithm Version-636', + 'zDetFace-Adjustment Version-637', + 'zDetFace-UUID-4TableStart-638', + 'zPerson-Person UUID-4TableStart-639', + 'zPerson-Is_Me_Confidence-4TableStart-640', + 'zPerson - MD ID-641', + 'zPerson - Asset Sort Order-642', + 'zDetFace-Confirmed Face Crop Generation State-643', + 'zDetFace-Manual-644', + 'zDetFace-Detection Type-645', + 'zPerson-Detection Type-646', + 'zDetFace-VIP Model Type-647', + 'zDetFace-Name Source-648', + 'zDetFace-Cloud Name Source-649', + 'zPerson-Merge Candidate Confidence-650', + 'zPerson-Person URI-651', + 'zPerson-Display Name-652', + 'zPerson-Full Name-653', + 'zPerson-Cloud Verified Type-654', + 'zFaceCrop-State-655', + 'zFaceCrop-Type-656', + 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-657', + 'zFaceCrop-UUID-4TableStart-658', + 'zPerson-Type-659', + 'zPerson-Verified Type-660', + 'zPerson-Gender Type-661', + 'zDetFace-Gender Type-662', + 'zDetFace-Center X-663', + 'zDetFace-Center Y-664', + 'zPerson-Age Type Estimate-665', + 'zDetFace-Age Type Estimate-666', + 'zDetFace-Ethnicity Type-667', + 'zDetFace-Skin Tone Type-668', + 'zDetFace-Hair Type-669', + 'zDetFace-Hair Color Type-670', + 'zDetFace-Head Gear Type-671', + 'zDetFace-Facial Hair Type-672', + 'zDetFace-Has Face Mask-673', + 'zDetFace-Pose Type-674', + 'zDetFace-Face Expression Type-675', + 'zDetFace-Has Smile-676', + 'zDetFace-Smile Type-677', + 'zDetFace-Lip Makeup Type-678', + 'zDetFace-Eyes State-679', + 'zDetFace-Is Left Eye Closed-680', + 'zDetFace-Is Right Eye Closed-681', + 'zDetFace-Gaze Center X-682', + 'zDetFace-Gaze Center Y-683', + 'zDetFace-Face Gaze Type-684', + 'zDetFace-Eye Glasses Type-685', + 'zDetFace-Eye Makeup Type-686', + 'zDetFace-Cluster Squence Number Key-687', + 'zDetFace-Grouping ID-688', + 'zDetFace-Master ID-689', + 'zDetFace-Quality-690', + 'zDetFace-Quality Measure-691', + 'zDetFace-Source Height-692', + 'zDetFace-Source Width-693', + 'zDetFace-Hidden-Asset Hidden-694', + 'zDetFace-In Trash-Recently Deleted-695', + 'zDetFace-Cloud Local State-696', + 'zDetFace-Training Type-697', + 'zDetFace.Pose Yaw-698', + 'zDetFace-Body Center X-699', + 'zDetFace-Body Center Y-700', + 'zDetFace-Body Height-701', + 'zDetFace-Body Width-702', + 'zDetFace-Roll-703', + 'zDetFace-Size-704', + 'zDetFace-Cluster Squence Number-705', + 'zDetFace-Blur Score-706', + 'zDetFacePrint-Face Print Version-707', + 'zMedAnlyAstAttr-Face Count-708', + 'zDetFaceGroup-UUID-4TableStart-709', + 'zDetFaceGroup-Person Builder State-710', + 'zDetFaceGroup-UnNamed Face Count-711', + 'zPerson-In Person Naming Model-712', + 'zPerson-Key Face Pick Source Key-713', + 'zPerson-Manual Order Key-714', + 'zPerson-Question Type-715', + 'zPerson-Suggested For Client Type-716', + 'zPerson-Merge Target Person-717', + 'zPerson-Cloud Local State-718', + 'zFaceCrop-Cloud Local State-719', + 'zFaceCrop-Cloud Type-720', + 'zPerson-Cloud Delete State-721', + 'zFaceCrop-Cloud Delete State-722', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-723', + 'zAsset-Highlight Visibility Score-724', + 'zMemory-UUID-4TableStart-725', + 'zMemory-AssetListPredicte-726', + 'zMemory-Score-727', + 'zMemory-SubTitle-728', + 'zMemory-Title-729', + 'zMemory-Category-730', + 'zMemory-SubCategory-731', + ('zMemory-Creation Date - datetime-732', 'datetime'), + ('zMemory-Last Enrichment Date - datetime-733', 'datetime'), + 'zMemory-User Action Options-734', + 'zMemory-Favorite Memory-735', + 'zMemory-View Count-736', + 'zMemory-Play Count-737', + 'zMemory-Rejected-738', + 'zMemory-Share Count-739', + 'zMemory-Sharing Composition-740', + 'zMemory-PhotosGraphData-HEX NSKeyed Plist-741', + 'zMemory-MovieAssetState-HEX NSKeyed Plist-742', + 'zMemory-MovieData-HEX NSKeyed Plist-743', + ('zMemory-Last Movie Play Date - datetime-744', 'datetime'), + ('zMemory-Last Viewed Date - datetime-745', 'datetime'), + 'zMemory-Pending Play Count Memory-746', + 'zMemory-Pending Share Count Memory-747', + 'zMemory-Pending View Count Memory-748', + 'zMemory-Pending State-749', + 'zMemory-Featured State-750', + 'zMemory-Photos Graph Version-751', + 'zMemory-Graph Memory Identifier-752', + 'zMemory-Notification State-753', + 'zMemory-Cloud Local State-754', + 'zMemory-Cloud Delete State-755', + 'zMemory-Story Color Grade Kind-756', + 'zMemory-Story Serialized Title Category-757', + 'zMemory-Syndicated Content State-758', + 'zMemory-Search Index Rebuild State-759', + 'zMemory-Black Listed Feature-760', + 'zMoment-UUID-4TableStart-761', + 'zMoment-Aggregation Score-762', + ('zMoment-Start Date - datetime-763', 'datetime'), + ('zMoment-Representative Date - datetime-764', 'datetime'), + 'zMoment-Timezone Offset-765', + ('zMoment-Modification Date - datetime-766', 'datetime'), + ('zMoment-End Date - datetime-767', 'datetime'), + 'zMoment-SubTitle-768', + 'zMoment-Localized Location Names-769', + 'zMoment-Title-770', + 'zMoment-Originator State-771', + 'zMoment-Sharing Composition-772', + 'zMoment-Cached Count Shared-773', + 'zMoment-Processed Location-774', + 'zMoment-Approx Latitude-775', + 'zMoment-Approx Longitude-776', + 'zMoment-GPS Horizontal Accuracy-777', + 'zMoment-Cache Count-778', + 'zMoment-Cached Photos Count-779', + 'zMoment-Cached Videos Count-780', + 'zMoment-Trashed State-781', + 'SBKAzSugg-UUID-4TableStart-782', + 'SBKAzSugg-Suggestion Context-783', + 'SBKAzSugg-Sharing Composition-784', + ('SBKAzSugg-Start Date - datetime-785', 'datetime'), + 'SBKAzSugg-State-786', + 'SBKAzSugg-Featured State-787', + 'SBKAzSugg- Available Features-788', + 'SBKAzSugg-Notification State-789', + ('SBKAzSugg-Creation Date - datetime-790', 'datetime'), + ('SBKAzSugg-End Date - datetime-791', 'datetime'), + ('SBKAzSugg-Activation Date - datetime-792', 'datetime'), + ('SBKAzSugg-Expunge Date - datetime-793', 'datetime'), + ('SBKAzSugg-Relevant Until Date - datetime-794', 'datetime'), + 'SBKAzSugg-Title-795', + 'SBKAzSugg-Sub Title-796', + 'SBKAzSugg-Cached Count-797', + 'SBKAzSugg-Cahed Photos Count-798', + 'SBKAzSugg-Cached Videos Count-799', + 'SBKAzSugg-Type-800', + 'SBKAzSugg-Sub Type-801', + 'SBKAzSugg-Action Data-802', + 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-803', + 'SBKAzSugg-Version-804', + 'SBKAzSugg-Cloud Local State-805', + 'SBKAzSugg-Cloud Delete State-806', + 'SBRAzSugg-UUID-4TableStart-807', + 'SBRAzSugg-Suggestion Context-808', + 'SBRAzSugg-Sharing Composition-809', + ('SBRAzSugg-Start Date - datetime-810', 'datetime'), + 'SBRAzSugg-State-811', + 'SBRAzSugg-Featured State-812', + 'SBRAzSugg- Available Features-813', + 'SBRAzSugg-Notification State-814', + ('SBRAzSugg-Creation Date - datetime-815', 'datetime'), + ('SBRAzSugg-End Date - datetime-816', 'datetime'), + ('SBRAzSugg-Activation Date - datetime-817', 'datetime'), + ('SBRAzSugg-Expunge Date - datetime-818', 'datetime'), + ('SBRAzSugg-Relevant Until Date - datetime-819', 'datetime'), + 'SBRAzSugg-Title-820', + 'SBRAzSugg-Sub Title-821', + 'SBRAzSugg-Cached Count-822', + 'SBRAzSugg-Cahed Photos Count-823', + 'SBRAzSugg-Cached Videos Count-824', + 'SBRAzSugg-Type-825', + 'SBRAzSugg-Sub Type-826', + 'SBRAzSugg-Action Data-827', + 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-828', + 'SBRAzSugg-Version-829', + 'SBRAzSugg-Cloud Local State-830', + 'SBRAzSugg-Cloud Delete State-831', + 'zMedAnlyAstAttr-Media Analysis Version-832', + 'zMedAnlyAstAttr-Audio Classification-833', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-834', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-835', + 'zMedAnlyAstAttr-Best Video Range Duration Value-836', + 'zMedAnlyAstAttr-Best Video Range Start Value-837', + 'zMedAnlyAstAttr-Packed Best Playback Rect-838', + 'zMedAnlyAstAttr-Activity Score-839', + 'zMedAnlyAstAttr-Video Score-840', + 'zMedAnlyAstAttr-Audio Score-841', + 'zMedAnlyAstAttr-Wallpaper Score-842', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-843', + 'zMedAnlyAstAttr-Blurriness Score-844', + 'zMedAnlyAstAttr-Exposure Score-845', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-846', + 'zMedAnlyAstAttr-Probable Rotation Direction-847', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-848', + 'zMedAnlyAstAttr-Color Normalization Data-849', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-850', + 'zMedAnlyAstAttr-Image_Caption_Version-851', + 'zMedAnlyAstAttr-Video_Caption_Version-852', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-853', + 'zAssetAnalyState-Asset UUID-4TableStart-854', + 'zAssetAnalyState-Analyisis State-855', + 'zAssetAnalyState-Worker Flags-856', + 'zAssetAnalyState-Worker Type-857', + ('zAssetAnalyState-Ignore Until Date - datetime-858', 'datetime'), + ('zAssetAnalyState-Last Ignored Date - datetime-859', 'datetime'), + 'zAssetAnalyState-Sort Token-860', + 'zMedAnlyAstAttr-Character Recognition Attr-861', + 'zCharRecogAttr-Algorithm Version-862', + 'zCharRecogAttr-Adjustment Version-863', + 'zCharRecogAttr-Character Recogition Data-HEX-864', + 'zCharRecogAttr-Machine Readable Code Data-HEX-865', + 'zMedAnlyAstAttr-Visual Search Attributes-866', + 'zVisualSearchAttr-Algorithm Version-867', + 'zVisualSearchAttr-Adjustment Version-868', + 'zVisualSearchAttr-Visual Search Data-HEX-869', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-870', + 'zVisualSearchAttr - Sticker Confidence Score-871', + 'zAsset-Sticker Confidence Score-872', + 'zAsset-Overall Aesthetic Score-873', + 'zCompAssetAttr-Failure Score zCompAssetAttr-874', + 'zCompAssetAttr-Harmonious Color Score-875', + 'zCompAssetAttr-Immersiveness Score-876', + 'zCompAssetAttr-Intersting Subject Score-877', + 'zCompAssetAttr-Intrusive Object Presence Score-878', + 'zCompAssetAttr-Lively Color Score-879', + 'zCompAssetAttr-Low Light-880', + 'zCompAssetAttr-Noise Score-881', + 'zCompAssetAttr-Pleasant Camera Tilt Score-882', + 'zCompAssetAttr-Pleasant Composition Score-883', + 'zCompAssetAttr-Pleasant Lighting Score-884', + 'zCompAssetAttr-Pleasant Pattern Score-885', + 'zCompAssetAttr-Pleasant Perspective Score-886', + 'zCompAssetAttr-Pleasant Post Processing Score-887', + 'zCompAssetAttr-Pleasant Reflection Score-888', + 'zCompAssetAttrPleasant Symmetry Score-889', + 'zCompAssetAttr-Sharply Focused Subject Score-890', + 'zCompAssetAttr-Tastfully Blurred Score-891', + 'zCompAssetAttr-Well Chosen Subject Score-892', + 'zCompAssetAttr-Well Framed Subject Score-893', + 'zCompAssetAttr-Well Timeed Shot Score-894', + 'zCldRes-Asset UUID-4TableStart-895', + 'zCldRes-Cloud Local State-896', + 'zCldRes-File Size-897', + 'zCldRes-Height-898', + 'zCldRes-Is Available-899', + 'zCldRes-Is Locally Available-900', + 'zCldRes-Prefetch Count-901', + 'zCldRes-Source Type-902', + 'zCldRes-Type-903', + 'zCldRes-Width-904', + 'zCldRes-Date Created-905', + 'zCldRes-Last OnDemand Download Date-906', + 'zCldRes-Last Prefetch Date-907', + 'zCldRes-Prunedat-908', + 'zCldRes-File Path-909', + 'zCldRes-Fingerprint-910', + 'zCldRes-Item ID-911', + 'zCldRes-UniID-912', + 'zUserFeedback-UUID-4TableStart-913', + 'zUserFeedback-Feature-914', + 'zUserFeedback-Type-915', + 'zUserFeedback-Last Modified Date-916', + 'zUserFeedback-Context-917', + 'zUserFeedback-Cloud Local State-918', + 'zUserFeedback-Cloud Delete State-919', + 'zUserFeedback - Creation Type-920', + 'zAddAssetAttr-zPK-921', + 'zAddAssetAttr-zENT-922', + 'ZAddAssetAttr-zOPT-923', + 'zAddAssetAttr-zAsset= zAsset_zPK-924', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-925', + 'zAddAssetAttr-Original Stable Hash-4Queryend-926', + 'zAddAssetAttr-Public Global UUID-927', + 'zAddAssetAttr-Deferred Photo Identifier-928', + 'zAddAssetAttr-Original Assets UUID-929', + 'zAddAssetAttr-Import Session ID-930', + 'zAddAssetAttr-Originating Asset Identifier-4endquery-931', + 'zAddAssetAttr.Adjusted Stable Hash-4endquery-932', + 'zAlbumList-zPK= Album List Key-933', + 'zAlbumList-zENT-934', + 'zAlbumList-zOPT-935', + 'zAlbumList-ID Key-936', + 'zAlbumList-UUID-937', + 'zAsset-zPK-938', + 'zAsset-zENT-939', + 'zAsset-zOPT-940', + 'zAsset-Master= zCldMast-zPK-941', + 'zAsset-Extended Attributes= zExtAttr-zPK-942', + 'zAsset-Import Session Key-943', + 'zAsset-Trashed by Participant= zSharePartic_zPK-944', + 'zAsset-Photo Analysis Attributes Key-945', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-946', + 'zAsset-FOK-Cloud Feed Asset Entry Key-947', + 'zAsset-Moment Share Key= zShare-zPK-948', + 'zAsset-zMoment Key= zMoment-zPK-949', + 'zAsset-Computed Attributes Asset Key-950', + 'zAsset-Highlight Being Assets-HBA Key-951', + 'zAsset-Highlight Being Extended Assets-HBEA Key-952', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-953', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-954', + 'zAsset-Highligh Being Summary Assets-HBSA Key-955', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-956', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-957', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-958', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-959', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-960', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-961', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-962', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-963', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-964', + 'zAsset-Promotion Score-965', + 'zAsset-Iconic Score-966', + 'zAsset-Media Analysis Attributes Key-967', + 'zAsset-Media Group UUID-968', + 'zAsset-UUID = store.cloudphotodb-969', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-970', + 'zAsset.Cloud Collection GUID-971', + 'zAsset-Avalanche UUID-972', + 'zAssetAnalyState-zPK-973', + 'zAssetAnalyState-zEnt-974', + 'zAssetAnalyState-zOpt-975', + 'zAssetAnalyState-Asset= zAsset-zPK-976', + 'zAssetAnalyState-Asset UUID-977', + 'zAsstContrib-zPK-978', + 'zAsstContrib-zEnt-979', + 'zAsstContrib-zOpt-980', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-981', + 'zAsstContrib-Participant= zSharePartic-zPK-982', + 'zAssetDes-zPK-983', + 'zAssetDes-zENT-984', + 'zAssetDes-zOPT-985', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-986', + 'zEdIPTCAttr-Asset Attributes= zAddAssetAttr.zPK-987', + 'zEdIPTCAttr-Action Advised-988', + 'zEdIPTCAttr-Audio Duration-989', + 'zEdIPTCAttr-Audio Outcue-990', + 'zEdIPTCAttr-Audio Sampling Rate-991', + 'zEdIPTCAttr-Audio Sampling Res-992', + 'zEdIPTCAttr-Audion Type-993', + 'zEdIPTCAttr-ByLine-994', + 'zEdIPTCAttr-ByLine Title-995', + 'zEdIPTCAttr-Caption-996', + 'zEdIPTCAttr-Category-997', + 'zEdIPTCAttr-CIADR City-998', + 'zEdIPTCAttr-CIADR Ctry-999', + 'zEdIPTCAttr-CIADR ExtAdr-1000', + 'zEdIPTCAttr-CIADR PCode-1001', + 'zEdIPTCAttr-CIADR Region-1002', + 'zEdIPTCAttr-CiEmailWork-1003', + 'zEdIPTCAttr-CiTeLWork-1004', + 'zEdIPTCAttr-CiURLWork-1005', + 'zEdIPTCAttr-City-1006', + 'zEdIPTCAttr-Contact-1007', + 'zEdIPTCAttr-Content LocationCode-1008', + 'zEdIPTCAttr-Content LocationName-1009', + 'zEdIPTCAttr-Copy Right Notice-1010', + 'zEdIPTCAttr-Cntry Primary LocationCode-1011', + 'zEdIPTCAttr-Cntry Primary LocationName-1012', + 'zEdIPTCAttr-Creator ContactInfo-1013', + 'zEdIPTCAttr-Credit-1014', + 'zEdIPTCAttr-DateCreated-TEXT-1015', + 'zEdIPTCAttr-Dig Creation Date - TEXT-1016', + 'zEdIPTCAttr-Dig Creation Time - TEXT-1017', + 'zEdIPTCAttr-Dig SourceType-1018', + 'zEdIPTCAttr-EditStatus-1019', + 'zEdIPTCAttr-EditorAL Update-1020', + 'zEdIPTCAttr-Exp Date - TEXT-1021', + 'zEdIPTCAttr-Exp Time - TEXT-1022', + 'zEdIPTCAttr-Fixture ID-1023', + 'zEdIPTCAttr-Headline-1024', + 'zEdIPTCAttr-Image Orientation-1025', + 'zEdIPTCAttr-Image Type-1026', + 'zEdIPTCAttr-Keywords-1027', + 'zEdIPTCAttr-Language ID-1028', + 'zEdIPTCAttr-Obj Attr Reference-1029', + 'zEdIPTCAttr-Obj Cycle-1030', + 'zEdIPTCAttr-Obj Name-1031', + 'zEdIPTCAttr-Obj Type Ref-1032', + 'zEdIPTCAttr-Org Transmission Ref-1033', + 'zEdIPTCAttr-Orginating Program-1034', + 'zEdIPTCAttr-Program Version-1035', + 'zEdIPTCAttr-Province State-1036', + 'zEdIPTCAttr-RefDate - TEXT-1037', + 'zEdIPTCAttr-RefNumber-1038', + 'zEdIPTCAttr-RefService-1039', + 'zEdIPTCAttr-Release Date - TEXT-1040', + 'zEdIPTCAttr-Release Time - TEXT-1041', + 'zEdIPTCAttr-Scene-1042', + 'zEdIPTCAttr-Source-1043', + 'zEdIPTCAttr-Spec Instructions-1044', + 'zEdIPTCAttr-Star Rating-1045', + 'zEdIPTCAttr-SubLocation-1046', + 'zEdIPTCAttr-Subject Ref-1047', + 'zEdIPTCAttr-Supplemental Category-1048', + 'zEdIPTCAttr-Time Created - TEXT-1049', + 'zEdIPTCAttr-Urgency-1050', + 'zEdIPTCAttr-Usage Terms-1051', + 'zEdIPTCAttr-Writer Editor-1052', + 'zEdIPTCAttr-Data - BLOB-1053', + 'zCharRecogAttr-zPK-1054', + 'zCharRecogAttr-zENT-1055', + 'zCharRecogAttr-zOPT-1056', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1057', + 'zCldFeedEnt-zPK= zCldShared keys-1058', + 'zCldFeedEnt-zENT-1059', + 'zCldFeedEnt-zOPT-1060', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1061', + 'zCldFeedEnt-Entry Invitation Record GUID-1062', + 'zCldFeedEnt-Entry Cloud Asset GUID-1063', + 'zCldMast-zPK= zAsset-Master-1064', + 'zCldMast-zENT-1065', + 'zCldMast-zOPT-1066', + 'zCldMast-Moment Share Key= zShare-zPK-1067', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1068', + 'zCldMast-Originating Asset ID-1069', + 'zCldMast-Import Session ID- AirDrop-StillTesting-1070', + 'CMzCldMastMedData-zENT-1071', + 'CMzCldMastMedData-zOPT-1072', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-1073', + 'AAAzCldMastMedData-zENT-1074', + 'AAAzCldMastMedData-zOPT-1075', + 'AAAzCldMastMedData-CldMast key-1076', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1077', + 'zCldRes-zPK-1078', + 'zCldRes-zENT-1079', + 'zCldRes-zOPT-1080', + 'zCldRes-Asset= zAsset-zPK-1081', + 'zCldRes-Cloud Master= zCldMast-zPK-1082', + 'zCldRes-Asset UUID-1083', + 'zCldShareAlbumInvRec-zPK-1084', + 'zCldShareAlbumInvRec-zEnt-1085', + 'zCldShareAlbumInvRec-zOpt-1086', + 'zCldShareAlbumInvRec-Album Key-1087', + 'zCldShareAlbumInvRec-FOK Album Key-1088', + 'zCldShareAlbumInvRec-Album GUID-1089', + 'zCldShareAlbumInvRec-zUUID-1090', + 'zCldShareAlbumInvRec-Cloud GUID-1091', + 'zCldSharedComment-zPK-1092', + 'zCldSharedComment-zENT-1093', + 'zCldSharedComment-zOPT-1094', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1095', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1096', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1097', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1098', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1099', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1100', + 'zCldSharedComment-Cloud GUID-1101', + 'zCompAssetAttr-zPK-1102', + 'zCompAssetAttr-zEnt-1103', + 'zCompAssetAttr-zOpt-1104', + 'zCompAssetAttr-Asset Key-1105', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1106', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1107', + 'zCompSyncAttr-zAsset= zAsset-zPK-1108', + 'zCompSyncAttr-zENT-1109', + 'zCompSyncAttr-zOPT-1110', + 'zDetFace-zPK-1111', + 'zDetFace-zEnt-1112', + 'zDetFace.zOpt-1113', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1114', + 'zDetFace-PersonForFace= zPerson-zPK-1115', + 'zDetFace-Person Being Key Face-1116', + 'zDetFace-Face Print-1117', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1118', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1119', + 'zDetFace-UUID-1120', + 'zDetFaceGroup-zPK-1121', + 'zDetFaceGroup-zENT-1122', + 'zDetFaceGroup-zOPT-1123', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1124', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1125', + 'zDetFaceGroup-UUID-1126', + 'zDetFacePrint-zPK-1127', + 'zDetFacePrint-zEnt-1128', + 'zDetFacePrint-zOpt-1129', + 'zDetFacePrint-Face Key-1130', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1131', + 'zExtAttr-zENT-1132', + 'zExtAttr-zOPT-1133', + 'zExtAttr-Asset Key-1134', + 'zEdIPTCAttr-zPK-1135', + 'zEdIPTCAttr-zENT-1136', + 'zEdIPTCAttr-zOPT-1137', + 'zFaceCrop-zPK-1138', + 'zFaceCrop-zEnt-1139', + 'zFaceCrop-zOpt-1140', + 'zFaceCrop-Asset Key-1141', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1142', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1143', + 'zFaceCrop-Face Key-1144', + 'zFaceCrop-UUID-1145', + 'zGenAlbum-zPK=32AlbumLists= 32Albums-1146', + 'zGenAlbum-zENT-1147', + 'zGenAlbum-zOpt-1148', + 'zGenAlbum-Custom Key Asset-1149', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1150', + 'zGenAlbum-FOK Parent Folder-1151', + 'zGenAlbum-zSyndicate-1152', + 'zGenAlbum-UUID-1153', + 'SWYConverszGenAlbum-UUID-1154', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1155', + 'SWYConverszGenAlbum-Cloud GUID-1156', + 'zGenAlbum-Project Render UUID-1157', + 'SWYConverszGenAlbum-Project Render UUID-1158', + 'zIntResou-zPK-1159', + 'zIntResou-zENT-1160', + 'zIntResou-zOPT-1161', + 'zIntResou-Asset= zAsset_zPK-1162', + 'zIntResou-Fingerprint-4Queryend-1163', + 'zIntResou-Stable Hash-4Queryend-1164', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1165', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1166', + 'zMedAnlyAstAttr-zEnt-1167', + 'zMedAnlyAstAttr-zOpt-1168', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1169', + 'zMemory-zPK-1170', + 'zMemory-zENT-1171', + 'zMemory-zOPT-1172', + 'zMemory-Key Asset= zAsset-zPK-1173', + 'zMemory-UUID-1174', + 'zMoment-zPK-1175', + 'zMoment-zENT-1176', + 'zMoment-zOPT-1177', + 'zMoment-Highlight Key-1178', + 'zMoment-UUID-1179', + 'zPerson-zPK=zDetFace-Person-1180', + 'zPerson-zEnt-1181', + 'zPerson-zOpt-1182', + 'zPerson-Share Participant= zSharePartic-zPK-1183', + 'zPerson-KeyFace=zDetFace-zPK-1184', + 'zPerson-Assoc Face Group Key-1185', + 'zPerson-Person UUID-1186', + 'zPerson-Is_Me_Confidence-1187', + 'zPhotoAnalysisAssetAttr-zPK-1188', + 'zPhotoAnalysisAssetAttr-zEnt-1189', + 'zPhotoAnalysisAssetAttr-zOpt-1190', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1191', + 'zSceneP-zPK-1192', + 'zSceneP-zENT-1193', + 'zSceneP-zOPT-1194', + 'zShare-zPK-1195', + 'zShare-zENT-1196', + 'zShare-zOPT-1197', + 'zShare-UUID-1198', + 'SPLzShare-UUID-1199', + 'zShare-Scope ID = store.cloudphotodb-1200', + 'zSharePartic-zPK-1201', + 'zSharePartic-zENT-1202', + 'zSharePartic-zOPT-1203', + 'zSharePartic-Share Key= zShare-zPK-1204', + 'zSharePartic-Person= zPerson-zPK-1205', + 'zSharePartic-UUID-1206', + 'SBKAzSugg-zPK-1207', + 'SBKAzSugg-zENT-1208', + 'SBKAzSugg-zOPT-1209', + 'SBKAzSugg-UUID-1210', + 'SBRAzSugg-zPK-1211', + 'SBRAzSugg-zENT-1212', + 'SBRAzSugg-zOPT-1213', + 'SBRAzSugg-UUID-1214', + 'z3SuggBRA-3RepAssets-1215', + 'z3SuggBRA-71SuggBeingRepAssets-1216', + 'z3SuggBKA-71SuggBeingKeyAssets= zSugg-zPK-1217', + 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1218', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1219', + 'zUnmAdj-zOPT-1220', + 'zUnmAdj-zENT-1221', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1222', + 'zUnmAdj-UUID-1223', + 'zUnmAdj-Other Adjustments Fingerprint-1224', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1225', + 'zUserFeedback-zPK-1226', + 'zUserFeedback-zENT-1227', + 'zUserFeedback-zOPT-1228', + 'zUserFeedback-Person= zPerson-zPK-1229', + 'zUserFeedback-Memory= zMemory-zPK-1230', + 'zUserFeedback-UUID-1231', + 'zVisualSearchAttr-zPK-1232', + 'zVisualSearchAttr-zENT-1233', + 'zVisualSearchAttr-zOPT-1234', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1235', + 'z32AlbumList-32Albums= zGenAlbum-zPK-1236', + 'z32AlbumList-Album List Key-1237', + 'z32AlbumList-FOK32Albums Key-1238', + 'z33Assets-33Albums= zGenAlbum-zPK-1239', + 'z33Assets-3Asset Key= zAsset-zPK in the Album-1240', + 'z33Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1241', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1242', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1243', + 'z3MemoryBCAs-56memoriesBeingCuratedAssets= zMemory-zPK-1244', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1245', + 'z3MemoryBECAs-56MemoriesBeingExtCuratedAssets= zMemory-zPK-1246', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1247', + 'z3MemoryBRAs-56RepresentativeAssets= zMemory-zPK-1248', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1249', + 'z3MemoryBUCAs-56MemoriesBeingUserCuratedAssets= zMemory-zPK-1250', + 'z3MemoryBCAs-56Memories Being Custom User Assets-1251', + 'z3MemoryBCAs-3Custom User Assets-1252', + 'z3MemoryBCAs-FOK-3Custom User Assets-1253') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph126_2iOS26RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("18.7.8")) or (version.parse(iosversion) >= version.parse("27")): + logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-GenAI_Not_Detected Still_Testing-0' + WHEN 1 THEN '1-Apple_Image_Playground GenAI_Still_Testing-1' + WHEN 2 THEN '2-Apple_Photo_CleanUP GenAI_Still_Testing-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + zAsset.ZIMAGEREQUESTHINTS AS 'zAsset-ImageRequestHints-HEX-Path', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State -4QueryStart', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date - datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll - datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created - datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date - datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created - datetime', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date - datetime', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date - datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date - datetime', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date - datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files - datetime', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date - datetime', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date - datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date - datetime', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAsset.ZLOCATIONDATA AS 'zAsset-Location Data-HEX', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State-4QueryStart', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM- 4QueryStart - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL- 4QueryStart - datetime', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity- 4QueryStart', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum- Kind- 4QueryStart', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind- 4QueryStart', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT-4TableStart', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data-HEX', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT-4TableStart', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data-HEX', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camear_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Detected_Screenshot_Still_Testing-0' + WHEN 1 THEN '1-Detected_Screenshot_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Paorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr.View_Presentation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pening-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustement-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + zIntResou.ZDATASTOREKEYDATA AS 'zIntResou-DataStoreKeyData-HEX', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date - datetime', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date - datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Yes-Adjustments_needs_update_Decoding-2' + WHEN 3 THEN '3-Yes-Adjustments_needs_update_Decoding-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State-Camera-Effects-Filters', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp - datetime', + DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp - datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date - datetime', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', + zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zUnmAdj.ZADJUSTMENTRENDERTYPES + WHEN 0 THEN '0-Standard or Portrait with erros-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Portrait-2' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || '' + END AS 'zUnmAdj-Adjustment Render Types', + CASE zUnmAdj.ZADJUSTMENTFORMATVERSION + WHEN 1.0 THEN '1.0-Markup-1.0' + WHEN 1.1 THEN '1.1-Slow-Mo-1.1' + WHEN 1.2 THEN '1.2-StillTesting' + WHEN 1.3 THEN '1.3-StillTesting' + WHEN 1.4 THEN '1.4-Filter-1.4' + WHEN 1.5 THEN '1.5-Adjust-1.5' + WHEN 1.6 THEN '1.6-Video-Trim-1.6' + WHEN 1.7 THEN '1.7-StillTesting' + WHEN 1.8 THEN '1.8-StillTesting' + WHEN 1.9 THEN '1.9-StillTesting' + WHEN 2.0 THEN '2.0-ScreenshotServices-2.0' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' + END AS 'zUnmAdj-Adjustment Format Version', + zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version StillTesing-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date - datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date - datetime', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp - datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date - datetime', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp - datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zSceneP.ZDATA AS 'zSceneP-Data-HEX NSKeyed Plist', + zSceneP.ZDUPLICATEMATCHINGDATA AS 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist', + zSceneP.ZDUPLICATEMATCHINGALTERNATEDATA AS 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZOBJECTSALIENCYRECTSDATA AS 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist', + zAddAssetAttr.ZORIGINALHASH AS 'zAddAssetAttr-Original Hash-HEX', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version', + DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp - datetime', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESDATA AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date - datetime', + CASE zCldFeedEnt.ZENTRYISMINE + WHEN 0 THEN '0-CldFeedEnt_Is_Mine-0' + WHEN 1 THEN '1-CldFeedEnt_IsNot_Mine-1' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYISMINE || '' + END AS 'zCldFeedEnt-Entry_Is_Mine', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPE + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPE || '' + END AS 'zCldFeedEnt-Entry Type', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date - datetime', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date - datetime', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date - datetime', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart', + SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT-CMM', + CASE SPLzShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' + END AS 'SPLzShare-zENT-SPL', + CASE zSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z66_SHARE || '' + END AS 'zSharePartic-z66SHARE', + CASE SPLzSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z66_SHARE || '' + END AS 'SPLzSharePartic-z66SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-CMM', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-SPL', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-CMM', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-SPL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State-CMM', + CASE SPLzShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || '' + END AS 'SPLzShare-Local Publish State-SPL', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission-CMM', + CASE SPLzShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || '' + END AS 'SPLzShare-Public Permission-SPL', + CASE zShare.ZALLOWSACCESSREQUESTS + WHEN 0 THEN '0-Does Not Allow Access Requests-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZALLOWSACCESSREQUESTS || '' + END AS 'zShare-Allows Access Requests-CMM', + CASE SPLzShare.ZALLOWSACCESSREQUESTS + WHEN 0 THEN '0-Does Not Allow Access Requests-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZALLOWSACCESSREQUESTS || '' + END AS 'SPLzShare-Allows Access Requests-SPL', + CASE zShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE + WHEN 1 THEN '1-CollectionShare Cur User Contrib State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE || '' + END AS 'zShare-CollectionShare CurrentUser ContribState-CMM', + CASE SPLzShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE + WHEN 1 THEN '1-CollectionShare Cur User Contrib State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE || '' + END AS 'SPLzShare-CollectionShare CurrentUser ContribState-SPL', + CASE zShare.ZCOLLECTIONSHAREEXPIRINGSTATE + WHEN 0 THEN '0-CollectionShare Expiring State-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHAREEXPIRINGSTATE || '' + END AS 'zShare-CollectionShare ExpiringState-CMM', + CASE SPLzShare.ZCOLLECTIONSHAREEXPIRINGSTATE + WHEN 0 THEN '0-CollectionShare Expiring State-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHAREEXPIRINGSTATE || '' + END AS 'SPLzShare-CollectionShare ExpiringState-SPL', + CASE zShare.ZCOLLECTIONSHAREKIND + WHEN 2 THEN '2-CollectionShare Kind-stilltesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHAREKIND || '' + END AS 'zShare-CollectionShare Kind-CMM', + CASE SPLzShare.ZCOLLECTIONSHAREKIND + WHEN 2 THEN '2-CollectionShare Kind-stilltesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHAREKIND || '' + END AS 'SPLzShare-CollectionShare Kind-SPL', + CASE zShare.ZCREATIONTYPE + WHEN 0 THEN '0-Creation Type-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCREATIONTYPE || '' + END AS 'zShare-Creation Type-CMM', + CASE SPLzShare.ZCREATIONTYPE + WHEN 0 THEN '0-Creation Type-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCREATIONTYPE || '' + END AS 'SPLzShare-Creation Type-SPL', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM', + SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM', + SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL', + zShare.ZTITLE AS 'zShare-Title-CMM', + SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL-CMM', + SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL', + zShare.ZCLIENTBUNDLEIDENTIFIER AS 'zShare-Client BundleID-CMM', + SPLzShare.ZCLIENTBUNDLEIDENTIFIER AS 'SPLzShare-Client BundleID-SPL', + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM - datetime', + DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL - datetime', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM - datetime', + DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM- 4zShare - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL- 4zShare - datetime', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM - datetime', + DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL - datetime', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM - datetime', + DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL - datetime', + DateTime(zShare.ZLASTMODIFIEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Modified Date-CMM - datetime', + DateTime(SPLzShare.ZLASTMODIFIEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Modified Date-SPL - datetime', + zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM', + SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM', + SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL', + zShare.ZUNSEENASSETSCOUNT AS 'zShare-Unseen Assets Count-CMM', + SPLzShare.ZUNSEENASSETSCOUNT AS 'SPLzShare-Unseen Assets Count-SPL', + CASE zShare.ZUNSEENCONTENTSTATE + WHEN 1 THEN '1-Unseen Content State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZUNSEENCONTENTSTATE || '' + END AS 'zShare-Unseen Content State-CMM', + CASE SPLzShare.ZUNSEENCONTENTSTATE + WHEN 1 THEN '1-Unseen Content State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZUNSEENCONTENTSTATE || '' + END AS 'SPLzShare-Unseen Content State-SPL', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State-CMM', + CASE SPLzShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || '' + END AS 'SPLzShare-Cloud Local State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || '' + END AS 'SPLzShare-Scope Syncing State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE1 + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE1 || '' + END AS 'zShare-Scope Syncing State1-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE1 + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE1 || '' + END AS 'SPLzShare-Scope Syncing State1-SPL', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy-CMM', + CASE SPLzShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || '' + END AS 'SPLzShare-Auto Share Policy-SPL', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-CMM-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion-CMM', + CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'SPLzShare-Should Notify On Upload Completion-SPL', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State-CMM', + CASE SPLzShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || '' + END AS 'SPLzShare-Trashed State-SPL', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State-CMM', + CASE SPLzShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || '' + END AS 'SPLzShare-Cloud Delete State-SPL', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM - datetime', + DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL - datetime', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM - datetime', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL - datetime', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM - datetime', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL - datetime', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source-CMM', + CASE SPLzShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || '' + END AS 'SPLzShare-Exit Source-SPL', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-SPL_Exit State-CMM', + CASE SPLzShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || '' + END AS 'SPLzShare-SPL_Exit State-SPL', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type-CMM', + CASE SPLzShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || '' + END AS 'SPLzShare-Exit Type-SPL', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignor Budgets-CMM', + CASE SPLzShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'SPLzShare-Should Ignor Budgets-SPL', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State-CMM', + CASE SPLzShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || '' + END AS 'SPLzShare-Preview State-SPL', + zShare.ZPHONEINVITATIONTOKEN AS 'zShare-Phone Invitation Token-CMM', + SPLzShare.ZPHONEINVITATIONTOKEN AS 'SPLzShare-Phone Invitation Token-SPL', + zShare.ZCKSHAREDATA AS 'zShare-CK Share Data-CMM', + SPLzShare.ZCKSHAREDATA AS 'SPLzShare-CK Share Data-SPL', + zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM', + SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL', + zShare.ZRULESDATA AS 'zShare-Rules-CMM', + SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State-CMM', + CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'SPLzShare-Participant Cloud Update State-SPL', + zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart', + SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + CASE SPLzSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || '' + END AS 'SPLzSharePartic-Acceptance Status', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_This_User-0' + WHEN 1 THEN '1-Participant-Is_This_User-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'SPLzSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE SPLzSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' + END AS 'SPLzSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE SPLzSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || '' + END AS 'SPLzSharePartic-Premission', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart', + zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name Components', + SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name Components', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE SPLzSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || '' + END AS 'SPLzSharePartic-Exit State', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date - datetime', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date - datetime', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date - datetime', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date - datetime', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date - datetime', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date - datetime', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date - datetime', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date - datetime', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL - datetime', + zGenAlbum.ZCLOUDMETADATA AS 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist', + SWYConverszGenAlbum.ZCLOUDMETADATA AS 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'SWYConverszGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'SWYConverszGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE SWYConverszGenAlbum.ZISOWNED + WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || '' + END AS 'SWYConverszGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID', + zShare.ZCLOUDPERSONID AS 'zShare-Cloud Person ID-CMM', + SPLzShare.ZCLOUDPERSONID AS 'SPLzShare-Cloud Person ID-SPL', + zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'SWYConverszGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date - datetime', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date - datetime', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Notification Enabled', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date - datetime', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date - datetime', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date - datetime', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled', + SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'SWYConverszGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE SWYConverszGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || '' + END AS 'SWYConverszGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date - datetime', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID', + CASE + WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset' + ELSE 'Face Area Points Not Detected in zAsset' + END AS 'zFaceCrop-Face Area Points', + CASE zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || '' + END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence', + zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version', + zAddAssetAttr.ZFACEREGIONS AS 'zAddAssetAttr-Face Regions HEX', + zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', + CASE zDetFace.ZASSETVISIBLE + WHEN 0 THEN 'Asset Not Visible Photo Library-0' + WHEN 1 THEN 'Asset Visible Photo Library-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || '' + END AS 'zDetFace-Asset Visible', + zDetFacePrint.ZDATA AS 'zDetFacePrint-Data HEX', + zPerson.ZCONTACTMATCHINGDICTIONARY AS 'zPerson-Contact Matching Dictionary HEX', + zPerson.ZFACECOUNT AS 'zPerson-Face Count', + zDetFace.ZFACECROP AS 'zDetFace-Face Crop', + zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version', + zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version', + zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-4TableStart', + zPerson.ZMDID AS 'zPerson - MD ID', + CASE zPerson.ZASSETSORTORDER + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || '' + END AS 'zPerson - Asset Sort Order', + CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || '' + END AS 'zDetFace-Confirmed Face Crop Generation State', + CASE zDetFace.ZMANUAL + WHEN 0 THEN 'zDetFace-Auto Detected-0' + WHEN 1 THEN 'zDetFace-Manually Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || '' + END AS 'zDetFace-Manual', + CASE zDetFace.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || '' + END AS 'zDetFace-Detection Type', + CASE zPerson.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || '' + END AS 'zPerson-Detection Type', + CASE zDetFace.ZVIPMODELTYPE + WHEN 0 THEN 'Not VIP-0' + WHEN 1 THEN 'VIP-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || '' + END AS 'zDetFace-VIP Model Type', + CASE zDetFace.ZNAMESOURCE + WHEN 0 THEN 'No Name Listed-0' + WHEN 1 THEN '1-Face Crop-1' + WHEN 2 THEN '2-Verified-Has-Person-URI' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || '' + END AS 'zDetFace-Name Source', + CASE zDetFace.ZCLOUDNAMESOURCE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN '1-User Added Via Face Crop-1' + WHEN 5 THEN '5-Asset Shared has Name' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || '' + END AS 'zDetFace-Cloud Name Source', + zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence', + zPerson.ZPERSONURI AS 'zPerson-Person URI', + zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', + zPerson.ZFULLNAME AS 'zPerson-Full Name', + CASE zPerson.ZCLOUDVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || '' + END AS 'zPerson-Cloud Verified Type', + CASE zFaceCrop.ZSTATE + WHEN 5 THEN 'Validated-5' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || '' + END AS 'zFaceCrop-State', + CASE zFaceCrop.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-Active' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || '' + END AS 'zFaceCrop-Type', + zFaceCrop.ZRESOURCEDATA AS 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart', + CASE zPerson.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || '' + END AS 'zPerson-Type', + CASE zPerson.ZVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' + END AS 'zPerson-Verified Type', + CASE zPerson.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || '' + END AS 'zPerson-Gender Type', + CASE zDetFace.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || '' + END AS 'zDetFace-Gender Type', + zDetFace.ZCENTERX AS 'zDetFace-Center X', + zDetFace.ZCENTERY AS 'zDetFace-Center Y', + CASE zPerson.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || '' + END AS 'zPerson-Age Type Estimate', + CASE zDetFace.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || '' + END AS 'zDetFace-Age Type Estimate', + CASE zDetFace.ZETHNICITYTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-African American-1' + WHEN 2 THEN 'White-2' + WHEN 3 THEN 'Hispanic-Latino-3' + WHEN 4 THEN 'Asian-4' + WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || '' + END AS 'zDetFace-Ethnicity Type', + CASE zDetFace.ZSKINTONETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Light-Pale White Skin Tone-1' + WHEN 2 THEN 'White-Fair Skin Tone-2' + WHEN 3 THEN 'Medium-White to Olive Skin Tone-3' + WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4' + WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5' + WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || '' + END AS 'zDetFace-Skin Tone Type', + CASE zDetFace.ZHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + WHEN 6 THEN '6-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || '' + END AS 'zDetFace-Hair Type', + CASE zDetFace.ZHAIRCOLORTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-Brown Hair Color-1' + WHEN 2 THEN 'Brown-Blonde Hair Color-2' + WHEN 3 THEN 'Brown-Red Hair Color-3' + WHEN 4 THEN 'Red-White Hair Color-4' + WHEN 5 THEN 'StillTesting-Artifical-5' + WHEN 6 THEN 'White-Bald Hair Color-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || '' + END AS 'zDetFace-Hair Color Type', + CASE zDetFace.ZHEADGEARTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-No Headgear' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || '' + END AS 'zDetFace-Head Gear Type', + CASE zDetFace.ZFACIALHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Clean Shaven Facial Hair Type-1' + WHEN 2 THEN 'Beard Facial Hair Type-2' + WHEN 3 THEN 'Goatee Facial Hair Type-3' + WHEN 4 THEN 'Mustache Facial Hair Type-4' + WHEN 5 THEN 'Stubble Facial Hair Type-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || '' + END AS 'zDetFace-Facial Hair Type', + CASE zDetFace.ZHASFACEMASK + WHEN 0 THEN 'No Mask-0' + WHEN 1 THEN 'Has Mask-1' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || '' + END AS 'zDetFace-Has Face Mask', + CASE zDetFace.ZPOSETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Face Frontal Pose-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN 'Face Profile Pose-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || '' + END AS 'zDetFace-Pose Type', + CASE zDetFace.ZFACEEXPRESSIONTYPE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN 'Disgusted-Angry-1' + WHEN 2 THEN 'Suprised-Fearful-2' + WHEN 3 THEN 'Neutral-3' + WHEN 4 THEN 'Confident-Smirk-4' + WHEN 5 THEN 'Happiness-5' + WHEN 6 THEN 'Sadness-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || '' + END AS 'zDetFace-Face Expression Type', + CASE zDetFace.ZHASSMILE + WHEN 0 THEN 'zDetFace No Smile-0' + WHEN 1 THEN 'zDetFace Smile-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || '' + END AS 'zDetFace-Has Smile', + CASE zDetFace.ZSMILETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'zDetFace Smile No Teeth-1' + WHEN 2 THEN 'zDetFace Smile has Teeth-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || '' + END AS 'zDetFace-Smile Type', + CASE zDetFace.ZLIPMAKEUPTYPE + WHEN 0 THEN 'zDetFace No Lip Makeup-0' + WHEN 1 THEN 'zDetFace Lip Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || '' + END AS 'zDetFace-Lip Makeup Type', + CASE zDetFace.ZEYESSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eyes Closed-1' + WHEN 2 THEN 'Eyes Open-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || '' + END AS 'zDetFace-Eyes State', + CASE zDetFace.ZISLEFTEYECLOSED + WHEN 0 THEN 'Left Eye Open-0' + WHEN 1 THEN 'Left Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || '' + END AS 'zDetFace-Is Left Eye Closed', + CASE zDetFace.ZISRIGHTEYECLOSED + WHEN 0 THEN 'Right Eye Open-0' + WHEN 1 THEN 'Right Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || '' + END AS 'zDetFace-Is Right Eye Closed', + zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X', + zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y', + CASE zDetFace.ZGAZETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || '' + END AS 'zDetFace-Face Gaze Type', + CASE zDetFace.ZGLASSESTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eye Glasses-1' + WHEN 2 THEN 'Sun Glasses-2' + WHEN 3 THEN 'No Glasses-3' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || '' + END AS 'zDetFace-Eye Glasses Type', + CASE zDetFace.ZEYEMAKEUPTYPE + WHEN 0 THEN 'No Eye Makeup-0' + WHEN 1 THEN 'Eye Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || '' + END AS 'zDetFace-Eye Makeup Type', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key', + zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID', + zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID', + zDetFace.ZQUALITY AS 'zDetFace-Quality', + zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure', + zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height', + zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width', + CASE zDetFace.ZHIDDEN + WHEN 0 THEN 'Not Hidden-0' + WHEN 1 THEN 'Hidden-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || '' + END AS 'zDetFace-Hidden-Asset Hidden', + CASE zDetFace.ZISINTRASH + WHEN 0 THEN 'Not In Trash-0' + WHEN 1 THEN 'In Trash-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || '' + END AS 'zDetFace-In Trash-Recently Deleted', + CASE zDetFace.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || '' + END AS 'zDetFace-Cloud Local State', + CASE zDetFace.ZTRAININGTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE + END AS 'zDetFace-Training Type', + zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw', + zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X', + zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y', + zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height', + zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width', + zDetFace.ZROLL AS 'zDetFace-Roll', + zDetFace.ZSIZE AS 'zDetFace-Size', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number', + zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score', + zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version', + zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart', + zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State', + zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count', + zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model', + zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key', + zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key', + zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type', + zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type', + zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person', + CASE zPerson.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Person Not Synced with Cloud-0' + WHEN 1 THEN 'Person Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE + END AS 'zPerson-Cloud Local State', + CASE zFaceCrop.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || '' + END AS 'zFaceCrop-Cloud Local State', + CASE zFaceCrop.ZCLOUDTYPE + WHEN 0 THEN 'Has Name-0' + WHEN 5 THEN 'Has Face Key-5' + WHEN 12 THEN '12-StillTesting' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || '' + END AS 'zFaceCrop-Cloud Type', + CASE zPerson.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || '' + END AS 'zPerson-Cloud Delete State', + CASE zFaceCrop.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || '' + END AS 'zFaceCrop-Cloud Delete State', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart', + zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score', + zMemory.ZUUID AS 'zMemory-UUID-4TableStart', + zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte', + zMemory.ZSCORE AS 'zMemory-Score', + zMemory.ZSUBTITLE AS 'zMemory-SubTitle', + zMemory.ZTITLE AS 'zMemory-Title', + CASE zMemory.ZCATEGORY + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 8 THEN '8-StillTesting' + WHEN 16 THEN '16-StillTesting' + WHEN 17 THEN '17-StillTesting' + WHEN 19 THEN '19-StillTesting' + WHEN 21 THEN '21-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 203 THEN '203-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 211 THEN '211-StillTesting' + WHEN 217 THEN '217-StillTesting' + WHEN 220 THEN '220-StillTesting' + WHEN 301 THEN '301-StillTesting' + WHEN 302 THEN '302-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || '' + END AS 'zMemory-Category', + CASE zMemory.ZSUBCATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 206 THEN '206-StillTesting' + WHEN 207 THEN '207-StillTesting' + WHEN 212 THEN '212-StillTesting' + WHEN 213 THEN '213-StillTesting' + WHEN 214 THEN '214-StillTesting' + WHEN 402 THEN '402-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || '' + END AS 'zMemory-SubCategory', + DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date - datetime', + DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date - datetime', + CASE zMemory.ZUSERACTIONOPTIONS + WHEN 0 THEN 'User Actions Options Memory Not User Created-0' + WHEN 1 THEN 'User Actions Options Memory User Created-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || '' + END AS 'zMemory-User Action Options', + CASE zMemory.ZFAVORITE + WHEN 0 THEN 'Memory Not Favorite-0' + WHEN 1 THEN 'Memory Favorite-1' + END AS 'zMemory-Favorite Memory', + zMemory.ZVIEWCOUNT AS 'zMemory-View Count', + zMemory.ZPLAYCOUNT AS 'zMemory-Play Count', + zMemory.ZREJECTED AS 'zMemory-Rejected', + zMemory.ZSHARECOUNT AS 'zMemory-Share Count', + zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition', + zMemory.ZPHOTOSGRAPHDATA AS 'zMemory-PhotosGraphData-HEX NSKeyed Plist', + zMemory.ZMOVIEASSETSTATE AS 'zMemory-MovieAssetState-HEX NSKeyed Plist', + zMemory.ZMOVIEDATA AS 'zMemory-MovieData-HEX NSKeyed Plist', + DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date - datetime', + DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date - datetime', + zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory', + zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory', + zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory', + zMemory.ZPENDINGSTATE AS 'zMemory-Pending State', + CASE zMemory.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || '' + END AS 'zMemory-Featured State', + zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version', + zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier', + CASE zMemory.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || '' + END AS 'zMemory-Notification State', + CASE zMemory.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Memory Not Synced with Cloud-0' + WHEN 1 THEN 'Memory Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || '' + END AS 'zMemory-Cloud Local State', + CASE zMemory.ZCLOUDDELETESTATE + WHEN 0 THEN 'Memory Not Deleted-0' + WHEN 1 THEN 'Memory Deleted-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || '' + END AS 'zMemory-Cloud Delete State', + CASE zMemory.ZSTORYCOLORGRADEKIND + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || '' + END AS 'zMemory-Story Color Grade Kind', + CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || '' + END AS 'zMemory-Story Serialized Title Category', + CASE zMemory.ZSYNDICATEDCONTENTSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || '' + END AS 'zMemory-Syndicated Content State', + CASE zMemory.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting Memory-Search Index State-0' + WHEN 1 THEN '1-StillTesting Memory-Search Index State-1' + WHEN 2 THEN '2-StillTesting Memory-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zMemory-Search Index Rebuild State', + zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature', + zMoment.ZUUID AS 'zMoment-UUID-4TableStart', + zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score', + DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date - datetime', + DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date - datetime', + zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset', + DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date - datetime', + DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date - datetime', + zMoment.ZSUBTITLE AS 'zMoment-SubTitle', + zMoment.ZLOCALIZEDLOCATIONNAMES AS 'zMoment-Localized Location Names', + zMoment.ZTITLE AS 'zMoment-Title', + CASE zMoment.ZORIGINATORSTATE + WHEN 0 THEN '0-StillTesting Moment-Originator_State-0' + WHEN 1 THEN '1-StillTesing Moment-Originator_State-1' + WHEN 2 THEN '2-StillTesting Moment-Originator_State-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || '' + END AS 'zMoment-Originator State', + CASE zMoment.ZSHARINGCOMPOSITION + WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0' + WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1' + WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || '' + END AS 'zMoment-Sharing Composition', + zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared', + CASE zMoment.ZPROCESSEDLOCATION + WHEN 2 THEN 'No-2' + WHEN 3 THEN 'Yes-3' + WHEN 6 THEN 'Yes-6' + ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || '' + END AS 'zMoment-Processed Location', + zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude', + zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude', + CASE zMoment.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zMoment.ZGPSHORIZONTALACCURACY + END AS 'zMoment-GPS Horizontal Accuracy', + zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count', + zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count', + zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count', + CASE zMoment.ZTRASHEDSTATE + WHEN 0 THEN 'zMoment Not In Trash-0' + WHEN 1 THEN 'zMoment In Trash-1' + ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || '' + END AS 'zMoment-Trashed State', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart', + SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context', + SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition', + DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date - datetime', + CASE SBKAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || '' + END AS 'SBKAzSugg-State', + CASE SBKAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || '' + END AS 'SBKAzSugg-Featured State', + CASE SBKAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBKAzSugg- Available Features', + CASE SBKAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBKAzSugg-Notification State', + DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date - datetime', + DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date - datetime', + DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date - datetime', + DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date - datetime', + DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date - datetime', + SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title', + SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title', + SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count', + SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count', + SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count', + CASE SBKAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || '' + END AS 'SBKAzSugg-Type', + CASE SBKAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || '' + END AS 'SBKAzSugg-Sub Type', + SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data', + SBKAzSugg.ZFEATURESDATA AS 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist', + SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version', + CASE SBKAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBKAzSugg-Cloud Local State', + CASE SBKAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBKAzSugg-Cloud Delete State', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart', + SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context', + SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition', + DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date - datetime', + CASE SBRAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || '' + END AS 'SBRAzSugg-State', + CASE SBRAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || '' + END AS 'SBRAzSugg-Featured State', + CASE SBRAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBRAzSugg- Available Features', + CASE SBRAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBRAzSugg-Notification State', + DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date - datetime', + DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date - datetime', + DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date - datetime', + DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date - datetime', + DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date - datetime', + SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title', + SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title', + SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count', + SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count', + SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count', + CASE SBRAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || '' + END AS 'SBRAzSugg-Type', + CASE SBRAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || '' + END AS 'SBRAzSugg-Sub Type', + SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data', + SBRAzSugg.ZFEATURESDATA AS 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist', + SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version', + CASE SBRAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBRAzSugg-Cloud Local State', + CASE SBRAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBRAzSugg-Cloud Delete State', + zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version', + zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value', + zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect', + zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score', + zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score', + zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score', + zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score', + zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score', + zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score', + zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', + zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', + zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', + zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', + zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', + zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', + DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date - datetime', + DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date - datetime', + zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', + zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', + zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', + zCharRecogAttr.ZCHARACTERRECOGNITIONDATA AS 'zCharRecogAttr-Character Recogition Data-HEX', + zCharRecogAttr.ZMACHINEREADABLECODEDATA AS 'zCharRecogAttr-Machine Readable Code Data-HEX', + zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes', + zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version', + zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version', + zVisualSearchAttr.ZVISUALSEARCHDATA AS 'zVisualSearchAttr-Visual Search Data-HEX', + zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version', + zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score', + zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', + zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score', + zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score', + zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score', + zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score', + zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score', + zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light', + zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score', + zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score', + zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score', + zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score', + zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score', + zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score', + zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score', + zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score', + zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score', + zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score', + zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score', + zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score', + zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score', + zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart', + zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State', + zCldRes.ZFILESIZE AS 'zCldRes-File Size', + zCldRes.ZHEIGHT AS 'zCldRes-Height', + zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available', + zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available', + zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count', + zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type', + zCldRes.ZTYPE AS 'zCldRes-Type', + zCldRes.ZWIDTH AS 'zCldRes-Width', + zCldRes.ZDATECREATED AS 'zCldRes-Date Created', + zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date', + zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date', + zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat', + zCldRes.ZFILEPATH AS 'zCldRes-File Path', + zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint', + zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID', + zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart', + zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature', + zUserFeedback.ZTYPE AS 'zUserFeedback-Type', + zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date', + zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context', + zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State', + zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State', + zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery', + zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', + zAlbumList.Z_ENT AS 'zAlbumList-zENT', + zAlbumList.Z_OPT AS 'zAlbumList-zOPT', + zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key', + zAlbumList.ZUUID AS 'zAlbumList-UUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK', + zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key', + zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key', + zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK', + zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt', + zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt', + zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID', + zAssetContrib.Z_PK AS 'zAsstContrib-zPK', + zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt', + zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt', + zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', + zAssetDes.Z_PK AS 'zAssetDes-zPK', + zAssetDes.Z_ENT AS 'zAssetDes-zENT', + zAssetDes.Z_OPT AS 'zAssetDes-zOPT', + zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK', + zEditedIPTCAttr.ZASSETATTRIBUTES AS 'zEdIPTCAttr-Asset Attributes= zAddAssetAttr.zPK', + zEditedIPTCAttr.ZACTIONADVISED AS 'zEdIPTCAttr-Action Advised', + zEditedIPTCAttr.ZAUDIODURATION AS 'zEdIPTCAttr-Audio Duration', + zEditedIPTCAttr.ZAUDIOOUTCUE AS 'zEdIPTCAttr-Audio Outcue', + zEditedIPTCAttr.ZAUDIOSAMPLINGRATE AS 'zEdIPTCAttr-Audio Sampling Rate', + zEditedIPTCAttr.ZAUDIOSAMPLINGRES AS 'zEdIPTCAttr-Audio Sampling Res', + zEditedIPTCAttr.ZAUDIOTYPE AS 'zEdIPTCAttr-Audion Type', + zEditedIPTCAttr.ZBYLINE AS 'zEdIPTCAttr-ByLine', + zEditedIPTCAttr.ZBYLINETITLE AS 'zEdIPTCAttr-ByLine Title', + zEditedIPTCAttr.ZCAPTION AS 'zEdIPTCAttr-Caption', + zEditedIPTCAttr.ZCATEGORY AS 'zEdIPTCAttr-Category', + zEditedIPTCAttr.ZCIADRCITY AS 'zEdIPTCAttr-CIADR City', + zEditedIPTCAttr.ZCIADRCTRY AS 'zEdIPTCAttr-CIADR Ctry', + zEditedIPTCAttr.ZCIADREXTADR AS 'zEdIPTCAttr-CIADR ExtAdr', + zEditedIPTCAttr.ZCIADRPCODE AS 'zEdIPTCAttr-CIADR PCode', + zEditedIPTCAttr.ZCIADRREGION AS 'zEdIPTCAttr-CIADR Region', + zEditedIPTCAttr.ZCIEMAILWORK AS 'zEdIPTCAttr-CiEmailWork', + zEditedIPTCAttr.ZCITELWORK AS 'zEdIPTCAttr-CiTeLWork', + zEditedIPTCAttr.ZCIURLWORK AS 'zEdIPTCAttr-CiURLWork', + zEditedIPTCAttr.ZCITY AS 'zEdIPTCAttr-City', + zEditedIPTCAttr.ZCONTACT AS 'zEdIPTCAttr-Contact', + zEditedIPTCAttr.ZCONTENTLOCATIONCODE AS 'zEdIPTCAttr-Content LocationCode', + zEditedIPTCAttr.ZCONTENTLOCATIONNAME AS 'zEdIPTCAttr-Content LocationName', + zEditedIPTCAttr.ZCOPYRIGHTNOTICE AS 'zEdIPTCAttr-Copy Right Notice', + zEditedIPTCAttr.ZCOUNTRYPRIMARYLOCATIONCODE AS 'zEdIPTCAttr-Cntry Primary LocationCode', + zEditedIPTCAttr.ZCOUNTRYPRIMARYLOCATIONNAME AS 'zEdIPTCAttr-Cntry Primary LocationName', + zEditedIPTCAttr.ZCREATORCONTACTINFO AS 'zEdIPTCAttr-Creator ContactInfo', + zEditedIPTCAttr.ZCREDIT AS 'zEdIPTCAttr-Credit', + zEditedIPTCAttr.ZDATECREATED AS 'zEdIPTCAttr-DateCreated-TEXT', + zEditedIPTCAttr.ZDIGITALCREATIONDATE AS 'zEdIPTCAttr-Dig Creation Date - TEXT', + zEditedIPTCAttr.ZDIGITALCREATIONTIME AS 'zEdIPTCAttr-Dig Creation Time - TEXT', + zEditedIPTCAttr.ZDIGITALSOURCETYPE AS 'zEdIPTCAttr-Dig SourceType', + zEditedIPTCAttr.ZEDITSTATUS AS 'zEdIPTCAttr-EditStatus', + zEditedIPTCAttr.ZEDITORIALUPDATE AS 'zEdIPTCAttr-EditorAL Update', + zEditedIPTCAttr.ZEXPIRATIONDATE AS 'zEdIPTCAttr-Exp Date - TEXT', + zEditedIPTCAttr.ZEXPIRATIONTIME AS 'zEdIPTCAttr-Exp Time - TEXT', + zEditedIPTCAttr.ZFIXTUREIDENTIFIER AS 'zEdIPTCAttr-Fixture ID', + zEditedIPTCAttr.ZHEADLINE AS 'zEdIPTCAttr-Headline', + zEditedIPTCAttr.ZIMAGEORIENTATION AS 'zEdIPTCAttr-Image Orientation', + zEditedIPTCAttr.ZIMAGETYPE AS 'zEdIPTCAttr-Image Type', + zEditedIPTCAttr.ZKEYWORDS AS 'zEdIPTCAttr-Keywords', + zEditedIPTCAttr.ZLANGUAGEIDENTIFIER AS 'zEdIPTCAttr-Language ID', + zEditedIPTCAttr.ZOBJECTATTRIBUTEREFERENCE AS 'zEdIPTCAttr-Obj Attr Reference', + zEditedIPTCAttr.ZOBJECTCYCLE AS 'zEdIPTCAttr-Obj Cycle', + zEditedIPTCAttr.ZOBJECTNAME AS 'zEdIPTCAttr-Obj Name', + zEditedIPTCAttr.ZOBJECTTYPEREFERENCE AS 'zEdIPTCAttr-Obj Type Ref', + zEditedIPTCAttr.ZORIGINALTRANSMISSIONREFERENCE AS 'zEdIPTCAttr-Org Transmission Ref', + zEditedIPTCAttr.ZORIGINATINGPROGRAM AS 'zEdIPTCAttr-Orginating Program', + zEditedIPTCAttr.ZPROGRAMVERSION AS 'zEdIPTCAttr-Program Version', + zEditedIPTCAttr.ZPROVINCESTATE AS 'zEdIPTCAttr-Province State', + zEditedIPTCAttr.ZREFERENCEDATE AS 'zEdIPTCAttr-RefDate - TEXT', + zEditedIPTCAttr.ZREFERENCENUMBER AS 'zEdIPTCAttr-RefNumber', + zEditedIPTCAttr.ZREFERENCESERVICE AS 'zEdIPTCAttr-RefService', + zEditedIPTCAttr.ZRELEASEDATE AS 'zEdIPTCAttr-Release Date - TEXT', + zEditedIPTCAttr.ZRELEASETIME AS 'zEdIPTCAttr-Release Time - TEXT', + zEditedIPTCAttr.ZSCENE AS 'zEdIPTCAttr-Scene', + zEditedIPTCAttr.ZSOURCE AS 'zEdIPTCAttr-Source', + zEditedIPTCAttr.ZSPECIALINSTRUCTIONS AS 'zEdIPTCAttr-Spec Instructions', + zEditedIPTCAttr.ZSTARRATING AS 'zEdIPTCAttr-Star Rating', + zEditedIPTCAttr.ZSUBLOCATION AS 'zEdIPTCAttr-SubLocation', + zEditedIPTCAttr.ZSUBJECTREFERENCE AS 'zEdIPTCAttr-Subject Ref', + zEditedIPTCAttr.ZSUPPLEMENTALCATEGORY AS 'zEdIPTCAttr-Supplemental Category', + zEditedIPTCAttr.ZTIMECREATED AS 'zEdIPTCAttr-Time Created - TEXT', + zEditedIPTCAttr.ZURGENCY AS 'zEdIPTCAttr-Urgency', + zEditedIPTCAttr.ZUSAGETERMS AS 'zEdIPTCAttr-Usage Terms', + zEditedIPTCAttr.ZWRITEREDITOR AS 'zEdIPTCAttr-Writer Editor', + zEditedIPTCAttr.ZDATA AS 'zEdIPTCAttr-Data - BLOB', + zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK', + zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT', + zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT', + zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zCldRes.Z_PK AS 'zCldRes-zPK', + zCldRes.Z_ENT AS 'zCldRes-zENT', + zCldRes.Z_OPT AS 'zCldRes-zOPT', + zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK', + zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID', + zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK', + zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt', + zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt', + zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key', + zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK', + zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', + zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', + zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zDetFace.Z_PK AS 'zDetFace-zPK', + zDetFace.Z_ENT AS 'zDetFace-zEnt', + zDetFace.Z_OPT AS 'zDetFace.zOpt', + zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face', + zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK', + zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face', + zDetFace.ZFACEPRINT AS 'zDetFace-Face Print', + zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK', + zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK', + zDetFace.ZUUID AS 'zDetFace-UUID', + zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK', + zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT', + zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT', + zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK', + zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID', + zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK', + zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt', + zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt', + zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zEditedIPTCAttr.Z_PK AS 'zEdIPTCAttr-zPK', + zEditedIPTCAttr.Z_ENT AS 'zEdIPTCAttr-zENT', + zEditedIPTCAttr.Z_OPT AS 'zEdIPTCAttr-zOPT', + zFaceCrop.Z_PK AS 'zFaceCrop-zPK', + zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt', + zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt', + zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID', + zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key', + zFaceCrop.ZFACE AS 'zFaceCrop-Face Key', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID', + zGenAlbum.Z_PK AS 'zGenAlbum-zPK=32AlbumLists= 32Albums', + zGenAlbum.Z_ENT AS 'zGenAlbum-zENT', + zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt', + zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset', + zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK', + zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder', + zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK', + zMemory.Z_PK AS 'zMemory-zPK', + zMemory.Z_ENT AS 'zMemory-zENT', + zMemory.Z_OPT AS 'zMemory-zOPT', + zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK', + zMemory.ZUUID AS 'zMemory-UUID', + zMoment.Z_PK AS 'zMoment-zPK', + zMoment.Z_ENT AS 'zMoment-zENT', + zMoment.Z_OPT AS 'zMoment-zOPT', + zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key', + zMoment.ZUUID AS 'zMoment-UUID', + zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person', + zPerson.Z_ENT AS 'zPerson-zEnt', + zPerson.Z_OPT AS 'zPerson-zOpt', + zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK', + zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', + zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', + zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', + zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', + zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', + zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK', + zSceneP.Z_PK AS 'zSceneP-zPK', + zSceneP.Z_ENT AS 'zSceneP-zENT', + zSceneP.Z_OPT AS 'zSceneP-zOPT', + zShare.Z_PK AS 'zShare-zPK', + zShare.Z_ENT AS 'zShare-zENT', + zShare.Z_OPT AS 'zShare-zOPT', + zShare.ZUUID AS 'zShare-UUID', + SPLzShare.ZUUID AS 'SPLzShare-UUID', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.Z_ENT AS 'zSharePartic-zENT', + zSharePartic.Z_OPT AS 'zSharePartic-zOPT', + zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK', + zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK', + SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT', + SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID', + SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK', + SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT', + SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', + z3SuggBRA.Z_3REPRESENTATIVESUGGESTIONASSETS AS 'z3SuggBRA-3RepAssets', + z3SuggBRA.Z_71SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-71SuggBeingRepAssets', + z3SuggBKA.Z_71SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-71SuggBeingKeyAssets= zSugg-zPK', + z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK', + zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', + zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', + zUnmAdj.Z_ENT AS 'zUnmAdj-zENT', + zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint', + zUserFeedback.Z_PK AS 'zUserFeedback-zPK', + zUserFeedback.Z_ENT AS 'zUserFeedback-zENT', + zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT', + zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK', + zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID', + zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK', + zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', + zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', + zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + z32AlbumLists.Z_32ALBUMS AS 'z32AlbumList-32Albums= zGenAlbum-zPK', + z32AlbumLists.Z_2ALBUMLISTS AS 'z32AlbumList-Album List Key', + z32AlbumLists.Z_FOK_32ALBUMS AS 'z32AlbumList-FOK32Albums Key', + z33Assets.Z_33ALBUMS AS 'z33Assets-33Albums= zGenAlbum-zPK', + z33Assets.Z_3ASSETS AS 'z33Assets-3Asset Key= zAsset-zPK in the Album', + z33Assets.Z_FOK_3ASSETS AS 'z33Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_56MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-56memoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', + z3MemoryBECAs.Z_56MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-56MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', + z3MemoryBRAs.Z_56MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-56RepresentativeAssets= zMemory-zPK', + z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', + z3MemoryBUCAs.Z_56MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-56MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_56MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-56Memories Being Custom User Assets', + z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', + z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZEDITEDIPTCATTRIBUTES zEditedIPTCAttr ON zEditedIPTCAttr.Z_PK = zAddAssetAttr.ZEDITEDIPTCATTRIBUTES + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS + LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK + LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK + LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES + LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK + LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE + LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE + LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK + LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON + LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP + LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_56MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_56MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_56MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_56MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_56MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_56MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK + LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT + LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_71SUGGESTIONSBEINGKEYASSETS + LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVESUGGESTIONASSETS = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_71SUGGESTIONSBEINGREPRESENTATIVEASSETS + ORDER BY zAsset.ZADDEDDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], + row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], + row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], + row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], + row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], + row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], + row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], + row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], + row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], + row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], + row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], + row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], + row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], + row[1248], row[1249], row[1250], row[1251], row[1252], row[1253])) + + data_headers = ('zAsset Complete-0', + 'zAsset-zPK-4QueryStart-1', + 'zAddAssetAttr-zPK-4QueryStart-2', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', + 'zAddAssetAttr-Original Stable Hash-4QueryStart-4', + 'zIntResou-Fingerprint-4QueryStart-5', + 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6', + 'zIntResou-Stable Hash-4QueryStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zExtAttr-Generative_AI_Type-21', + 'zExtAttr-Credit-22', + 'zAsset-Derived Camera Capture Device-23', + 'zAsset-Capture_Session_Identifier-24', + 'zAddAssetAttr-Camera Captured Device-25', + 'zAddAssetAttr-Imported by-26', + 'zCldMast-Imported By-27', + 'zAddAssetAttr.Imported by Bundle Identifier-28', + 'zAddAssetAttr-Imported By Display Name-29', + 'zCldMast-Imported by Bundle ID-30', + 'zCldMast-Imported by Display Name-31', + 'zAsset-ImageRequestHints-HEX-Path-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Is_Recently_Saved-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State -4QueryStart-40', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', + ('zAsset-Added Date - datetime-44', 'datetime'), + ('zAsset- SortToken -CameraRoll - datetime-45', 'datetime'), + 'zAddAssetAttr-Date Created Source-46', + ('zAsset-Date Created - datetime-47', 'datetime'), + ('zCldMast-Creation Date - datetime-48', 'datetime'), + ('zIntResou-CldMst Date Created - datetime-49', 'datetime'), + 'zAddAssetAttr-Time Zone Name-50', + 'zAddAssetAttr-Time Zone Offset-51', + 'zAddAssetAttr-Inferred Time Zone Offset-52', + 'zAddAssetAttr-EXIF-String-53', + ('zAsset-Modification Date - datetime-54', 'datetime'), + ('zAddAssetAttr-Last Viewed Date - datetime-55', 'datetime'), + ('zAsset-Last Shared Date - datetime-56', 'datetime'), + 'zCldMast-Cloud Local State-57', + ('zCldMast-Import Date - datetime-58', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files - datetime-59', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-60', + ('zAddAssetAttr-Alt Import Image Date - datetime-61', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', + ('zAsset-Cloud Batch Publish Date - datetime-63', 'datetime'), + ('zAsset-Cloud Server Publish Date - datetime-64', 'datetime'), + 'zAsset-Cloud Download Requests-65', + 'zAsset-Cloud Batch ID-66', + 'zAddAssetAttr-Upload Attempts-67', + 'zAsset-Latitude-68', + 'zExtAttr-Latitude-69', + 'zAsset-Longitude-70', + 'zExtAttr-Longitude-71', + 'zAddAssetAttr-GPS Horizontal Accuracy-72', + 'zAddAssetAttr-Location Hash-73', + 'zAsset-Location Data-HEX-74', + 'zAddAssetAttr-Reverse Location Is Valid-75', + 'zAddAssetAttr-Reverse Location Data-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'ParentzGenAlbum-UUID-4QueryStart-79', + 'zGenAlbum-UUID-4QueryStart-80', + 'SWYConverszGenAlbum-UUID-4QueryStart-81', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', + 'zGenAlbum-Cloud GUID-4QueryStart-83', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', + 'zGenAlbum-Project Render UUID-4QueryStart-87', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', + 'zGenAlbum-Cloud_Local_State-4QueryStart-90', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', + ('ParentzGenAlbum- Creation Date- 4QueryStart - datetime-92', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart - datetime-93', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart - datetime-94', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart - datetime-95', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart - datetime-96', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart - datetime-97', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart - datetime-98', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart - datetime-99', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart - datetime-100', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart - datetime-101', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart - datetime-102', 'datetime'), + ('zShare-Cloud Subscription Date-CMM- 4QueryStart - datetime-103', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL- 4QueryStart - datetime-104', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-105', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-106', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-107', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-108', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-109', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-110', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-111', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-112', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-113', + 'zGenAlbum-zENT- Entity- 4QueryStart-114', + 'ParentzGenAlbum- Kind- 4QueryStart-115', + 'zGenAlbum-Album Kind- 4QueryStart-116', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-117', + 'AAAzCldMastMedData-zOPT-4TableStart-118', + 'zAddAssetAttr-Media Metadata Type-119', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-120', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-121', + 'AAAzCldMastMedData-Data-HEX-122', + 'CldMasterzCldMastMedData-zOPT-4TableStart-123', + 'zCldMast-Media Metadata Type-124', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-125', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-126', + 'CMzCldMastMedData-Data-HEX-127', + 'zAsset-Search Index Rebuild State-128', + 'zAddAssetAttr-Syndication History-129', + 'zMedAnlyAstAttr-Syndication Processing Version-130', + 'zMedAnlyAstAttr-Syndication Processing Value-131', + 'zAsset-Orientation-132', + 'zAddAssetAttr-Original Orientation-133', + 'zAsset-Kind-134', + 'zAsset-Is_Detected_Screenshot-135', + 'zAsset-Kind-Sub-Type-136', + 'zAddAssetAttr-Cloud Kind Sub Type-137', + 'zAsset-Playback Style-138', + 'zAsset-Playback Variation-139', + 'zAddAssetAttr.View_Presentation-140', + 'zAsset-Video Duration-141', + 'zExtAttr-Duration-142', + 'zAsset-Video CP Duration-143', + 'zAddAssetAttr-Video CP Duration Time Scale-144', + 'zAsset-Video CP Visibility State-145', + 'zAddAssetAttr-Video CP Display Value-146', + 'zAddAssetAttr-Video CP Display Time Scale-147', + 'zIntResou-Datastore Class ID-148', + 'zIntResou-Local Availability-149', + 'zIntResou-Local Availability Target-150', + 'zIntResou-Cloud Local State-151', + 'zIntResou-Remote Availability-152', + 'zIntResou-Remote Availability Target-153', + 'zIntResou-Side Car Index-154', + 'zAsset-UUID = store.cloudphotodb-4TableStart-155', + 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156', + 'zIntResou-Fingerprint-4TableStart-157', + 'zIntResou-Stable Hash-4TableStart-158', + 'zIntResou- File ID-159', + 'zIntResou-Version-160', + 'zAddAssetAttr- Original-File-Size-161', + 'zIntResou-Resource Type-162', + 'zIntResou-DataStoreKeyData-HEX-163', + 'zIntResou-Datastore Sub-Type-164', + 'zIntResou-Cloud Source Type-165', + 'zIntResou-Data Length-166', + 'zIntResou-Recipe ID-167', + ('zIntResou-Cloud Last Prefetch Date - datetime-168', 'datetime'), + 'zIntResou-Cloud Prefetch Count-169', + ('zIntResou- Cloud-Last-OnDemand Download-Date - datetime-170', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', + 'zIntResou-Compact-UTI-172', + 'zAsset-Uniform Type ID-173', + 'zAsset-Original Color Space-174', + 'zCldMast-Uniform_Type_ID-175', + 'zCldMast-Full Size JPEG Source-176', + 'zAsset-HDR Gain-177', + 'zAsset-zHDR_Type-178', + 'zExtAttr-Codec-179', + 'zIntResou-Codec Four Char Code Name-180', + 'zCldMast-Codec Name-181', + 'zCldMast-Video Frame Rate-182', + 'zCldMast-Placeholder State-183', + 'zAsset-Depth_Type-184', + 'zAsset-Avalanche UUID-4TableStart-185', + 'zAsset-Avalanche_Kind-186', + 'zAsset-Avalanche_Pick_Type-BurstAsset-187', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', + 'zAddAssetAttr-Cloud Recovery State-189', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', + 'zAsset-Deferred Processing Needed-191', + 'zAsset-Video Deferred Processing Needed-192', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', + 'zAddAssetAttr-Deferred Processing Candidate Options-194', + 'zAsset-Adjustments_State-Camera-Effects-Filters-195', + 'zUnmAdj-UUID-4TableStart-196', + 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197', + 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200', + ('zAsset-Adjustment Timestamp - datetime-201', 'datetime'), + ('zUnmAdj-Adjustment Timestamp - datetime-202', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date - datetime-203', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-204', + 'zUnmAdj-Editor Localized Name-205', + 'zUnmAdj-Adjustment Format ID-206', + 'zAddAssetAttr-Montage-207', + 'zUnmAdj-Adjustment Render Types-208', + 'zUnmAdj-Adjustment Format Version-209', + 'zUnmAdj-Adjustment Base Image Format-210', + 'zCompSyncAttr-Local_Analysis_Stage-211', + 'zCompSyncAttr-Cloud_Compute_State_Version-212', + 'zCompSyncAttr-Local_Analysis_Major_Version-213', + 'zAsset-Favorite-214', + 'zAsset-Hidden-215', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', + ('zAsset-Trashed Date - datetime-217', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', + 'zAsset-Delete-Reason-219', + 'zIntResou-Trash State-220', + ('zIntResou-Trashed Date - datetime-221', 'datetime'), + 'zAsset-Cloud Delete State-222', + 'zIntResou-Cloud Delete State-223', + 'zAddAssetAttr-PTP Trashed State-224', + 'zIntResou-PTP Trashed State-225', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', + ('zMedAnlyAstAttr-Media Analysis Timestamp - datetime-227', 'datetime'), + ('zAsset-Analysis State Modificaion Date - datetime-228', 'datetime'), + 'zAddAssetAttr- Pending View Count-229', + 'zAddAssetAttr- View Count-230', + 'zAddAssetAttr- Pending Play Count-231', + 'zAddAssetAttr- Play Count-232', + 'zAddAssetAttr- Pending Share Count-233', + 'zAddAssetAttr- Share Count-234', + 'zAddAssetAttr-Allowed for Analysis-235', + 'zAddAssetAttr-Scene Analysis Version-236', + 'zAddAssetAttr-Scene Analysis is From Preview-237', + ('zAddAssetAttr-Scene Analysis Timestamp - datetime-238', 'datetime'), + 'zAsset-Duplication Asset Visibility State-239', + 'zAddAssetAttr-Destination Asset Copy State-240', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', + 'zSceneP-Data-HEX NSKeyed Plist-242', + 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', + 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', + 'zCldMast-Source Master For Duplication Scope ID-246', + 'zAddAssetAttr-Source Asset For Duplication ID-247', + 'zCldMast-Source Master for Duplication ID-248', + 'zAddAssetAttr-Variation Suggestions States-249', + 'zAsset-High Frame Rate State-250', + 'zAsset-Video Key Frame Time Scale-251', + 'zAsset-Video Key Frame Value-252', + 'zAsset-Current_Sleet_Cast-253', + 'zAddAssetAttr.Sleet_Is_Reversible-254', + 'zExtAttr-Sleet_Rendering_Version-255', + 'zExtAttr-Sleet_Intensity-256', + 'zExtAttr-Sleet_Tone_Bias-257', + 'zExtAttr-Sleet_Color_Bias-258', + 'zExtAttr-Sleet_Cast-259', + 'zExtAttr-ISO-260', + 'zExtAttr-Metering Mode-261', + 'zExtAttr-Sample Rate-262', + 'zExtAttr-Track Format-263', + 'zExtAttr-White Balance-264', + 'zExtAttr-Aperture-265', + 'zExtAttr-BitRate-266', + 'zExtAttr-Exposure Bias-267', + 'zExtAttr-Frames Per Second-268', + 'zExtAttr-Shutter Speed-269', + 'zExtAttr-Slush Scene Bias-270', + 'zExtAttr-Slush Version-271', + 'zExtAttr-Slush Preset-272', + 'zExtAttr-Slush Warm Bias-273', + 'zAsset-Height-274', + 'zAddAssetAttr-Original Height-275', + 'zIntResou-Unoriented Height-276', + 'zAsset-Width-277', + 'zAddAssetAttr-Original Width-278', + 'zIntResou-Unoriented Width-279', + 'zShare-Thumbnail Image Data-280', + 'SPLzShare-Thumbnail Image Data-281', + 'zAsset-Thumbnail Index-282', + 'zAddAssetAttr-Embedded Thumbnail Height-283', + 'zAddAssetAttr-Embedded Thumbnail Length-284', + 'zAddAssetAttr-Embedded Thumbnail Offset-285', + 'zAddAssetAttr-Embedded Thumbnail Width-286', + 'zAsset-Packed Acceptable Crop Rect-287', + 'zAsset-Packed Badge Attributes-288', + 'zAsset-Packed Preferred Crop Rect-289', + 'zAsset-Curation Score-290', + 'zAsset-Camera Processing Adjustment State-291', + 'zAsset-Depth Type-292', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293', + 'zAddAssetAttr-Orig Resource Choice-294', + 'zAsset-Spatial Type-295', + 'zAddAssetAttr-Spatial Over Capture Group ID-296', + 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297', + 'zAddAssetAttr-Original Hash-HEX-298', + 'zAddAssetAttr-Place Annotation Data-299', + 'zAddAssetAttr-Distance Identity-300', + 'zAddAssetAttr-Edited IPTC Attributes-301', + 'zAssetDes-Long Description-302', + 'zAddAssetAttr-Asset Description-303', + 'zAddAssetAttr-Title-Comments via Cloud Website-304', + 'zAddAssetAttr-Accessibility Description-305', + 'zAddAssetAttr-Photo Stream Tag ID-306', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp - datetime-308', 'datetime'), + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309', + ('zCldFeedEnt-Entry Date - datetime-310', 'datetime'), + 'zCldFeedEnt-Entry_Is_Mine-311', + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314', + 'zCldFeedEnt-Entry Priority Number-315', + 'zCldFeedEnt-Entry Type-316', + 'zCldSharedComment-Cloud GUID-4TableStart-317', + ('zCldSharedComment-Date - datetime-318', 'datetime'), + ('zCldSharedComment-Comment Client Date - datetime-319', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date - datetime-320', 'datetime'), + 'zCldSharedComment-Type-321', + 'zCldSharedComment-Comment Text-322', + 'zCldSharedComment-Commenter Hashed Person ID-323', + 'zCldSharedComment-Batch Comment-324', + 'zCldSharedComment-Is a Caption-325', + 'zAsset-Cloud Has Comments by Me-326', + 'zCldSharedComment-Is My Comment-327', + 'zCldSharedComment-Is Deletable-328', + 'zAsset-Cloud Has Comments Conversation-329', + 'zAsset-Cloud Has Unseen Comments-330', + 'zCldSharedComment-Liked-331', + 'zAddAssetAttr-Share Type-332', + 'zAsset-Library Scope Share State- StillTesting-333', + 'zAsset-Active Library Scope Participation State-334', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-335', + 'zShare-UUID-CMM-4TableStart-336', + 'SPLzShare-UUID-SPL-4TableStart-337', + 'zShare-zENT-CMM-338', + 'SPLzShare-zENT-SPL-339', + 'zSharePartic-z66SHARE-340', + 'SPLzSharePartic-z66SHARE-341', + 'zShare-Status-CMM-342', + 'zShare-Status-SPL-343', + 'zShare-Scope Type-CMM-344', + 'zShare-Scope Type-SPL-345', + 'zShare-Local Publish State-CMM-346', + 'SPLzShare-Local Publish State-SPL-347', + 'zShare-Public Permission-CMM-348', + 'SPLzShare-Public Permission-SPL-349', + 'zShare-Allows Access Requests-CMM-350', + 'SPLzShare-Allows Access Requests-SPL-351', + 'zShare-CollectionShare CurrentUser ContribState-CMM-352', + 'SPLzShare-CollectionShare CurrentUser ContribState-SPL-353', + 'zShare-CollectionShare ExpiringState-CMM-354', + 'SPLzShare-CollectionShare ExpiringState-SPL-355', + 'zShare-CollectionShare Kind-CMM-356', + 'SPLzShare-CollectionShare Kind-SPL-357', + 'zShare-Creation Type-CMM-358', + 'SPLzShare-Creation Type-SPL-359', + 'zShare-Originating Scope ID-CMM-360', + 'SPLzShare-Originating Scope ID-SPL-361', + 'zShare-Scope ID-CMM-362', + 'SPLzShare-Scope ID-SPL-363', + 'zShare-Title-CMM-364', + 'SPLzShare-Title-SPL-365', + 'zShare-Share URL-CMM-366', + 'SPLzShare-Share URL-SPL-367', + 'zShare-Client BundleID-CMM-368', + 'SPLzShare-Client BundleID-SPL-369', + ('zShare-Creation Date-CMM - datetime-370', 'datetime'), + ('SPLzShare-Creation Date-SPL - datetime-371', 'datetime'), + ('zShare-Start Date-CMM - datetime-372', 'datetime'), + ('SPLzShare-Start Date-SPL - datetime-373', 'datetime'), + ('zShare-Cloud Subscription Date-CMM- 4zShare - datetime-374', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL- 4zShare - datetime-375', 'datetime'), + ('zShare-End Date-CMM - datetime-376', 'datetime'), + ('SPLzShare-End Date-SPL - datetime-377', 'datetime'), + ('zShare-Expiry Date-CMM - datetime-378', 'datetime'), + ('SPLzShare-Expiry Date-SPL - datetime-379', 'datetime'), + ('zShare-Last Modified Date-CMM - datetime-380', 'datetime'), + ('SPLzShare-Last Modified Date-SPL - datetime-381', 'datetime'), + 'zShare-Cloud Item Count-CMM-382', + 'SPLzShare-Cloud Item Count-SPL-383', + 'zShare-Asset Count-CMM-384', + 'SPLzShare-Asset Count-SPL-385', + 'zShare-Cloud Photo Count-CMM-386', + 'SPLzShare-Cloud Photo Count-SPL-387', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-388', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-389', + 'zShare-Photos Count-CMM-390', + 'SPLzShare-Photos Count-CMM-SPL-391', + 'zShare-Cloud Video Count-CMM-392', + 'SPLzShare-Cloud Video Count-SPL-393', + 'zShare-Videos Count-CMM-394', + 'SPLzShare-Videos Count-SPL-395', + 'zShare-Unseen Assets Count-CMM-396', + 'SPLzShare-Unseen Assets Count-SPL-397', + 'zShare-Unseen Content State-CMM-398', + 'SPLzShare-Unseen Content State-SPL-399', + 'zShare-Force Sync Attempted-CMM-400', + 'SPLzShare-Force Sync Attempted-SPL-401', + 'zShare-Cloud Local State-CMM-402', + 'SPLzShare-Cloud Local State-SPL-403', + 'zShare-Scope Syncing State-CMM-404', + 'SPLzShare-Scope Syncing State-SPL-405', + 'zShare-Scope Syncing State1-CMM-406', + 'SPLzShare-Scope Syncing State1-SPL-407', + 'zShare-Auto Share Policy-CMM-408', + 'SPLzShare-Auto Share Policy-SPL-409', + 'zShare-Should Notify On Upload Completion-CMM-410', + 'SPLzShare-Should Notify On Upload Completion-SPL-411', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-412', + 'zShare-Trashed State-CMM-413', + 'SPLzShare-Trashed State-SPL-414', + 'zShare-Cloud Delete State-CMM-415', + 'SPLzShare-Cloud Delete State-SPL-416', + ('zShare-Trashed Date-CMM - datetime-417', 'datetime'), + ('SPLzShare-Trashed Date-SPL - datetime-418', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM - datetime-419', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL - datetime-420', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM - datetime-421', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL - datetime-422', 'datetime'), + 'zShare-Exit Source-CMM-423', + 'SPLzShare-Exit Source-SPL-424', + 'zShare-SPL_Exit State-CMM-425', + 'SPLzShare-SPL_Exit State-SPL-426', + 'zShare-Exit Type-CMM-427', + 'SPLzShare-Exit Type-SPL-428', + 'zShare-Should Ignor Budgets-CMM-429', + 'SPLzShare-Should Ignor Budgets-SPL-430', + 'zShare-Preview State-CMM-431', + 'SPLzShare-Preview State-SPL-432', + 'zShare-Phone Invitation Token-CMM-433', + 'SPLzShare-Phone Invitation Token-SPL-434', + 'zShare-CK Share Data-CMM-435', + 'SPLzShare-CK Share Data-SPL-436', + 'zShare-Preview Data-CMM-437', + 'SPLzShare-Preview Data-SPL-438', + 'zShare-Rules-CMM-439', + 'SPLzShare-Rules-SPL-440', + 'zShare-Thumbnail Image Data-CMM-441', + 'SPLzShare-Thumbnail Image Data-SPL-442', + 'zShare-Participant Cloud Update State-CMM-443', + 'SPLzShare-Participant Cloud Update State-SPL-444', + 'zSharePartic-UUID-4TableStart-445', + 'SPLzSharePartic-UUID-4TableStart-446', + 'zSharePartic-Acceptance Status-447', + 'SPLzSharePartic-Acceptance Status-448', + 'zSharePartic-Is Current User-449', + 'SPLzSharePartic-Is Current User-450', + 'zSharePartic-Role-451', + 'SPLzSharePartic-Role-452', + 'zSharePartic-Premission-453', + 'SPLzSharePartic-Premission-454', + 'zSharePartic-Participant ID-455', + 'SPLzSharePartic-Participant ID-456', + 'zSharePartic-User ID-457', + 'SPLzSharePartic-User ID-458', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-459', + 'SPLzSharePartic-zPK-4TableStart-460', + 'zSharePartic-zPK-4TableStart-461', + 'zSharePartic-Email Address-462', + 'SPLzSharePartic-Email Address-463', + 'zSharePartic-Phone Number-464', + 'SPLzSharePartic-Phone Number-465', + 'zSharePartic-Name Components-466', + 'SPLzSharePartic-Name Components-467', + 'zSharePartic-Exit State-468', + 'SPLzSharePartic-Exit State-469', + 'ParentzGenAlbum-UUID-4TableStart-470', + 'zGenAlbum-UUID-4TableStart-471', + 'SWYConverszGenAlbum-UUID-4TableStart-472', + 'ParentzGenAlbum-Cloud GUID-4TableStart-473', + 'zGenAlbum-Cloud GUID-4TableStart-474', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-475', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-476', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-477', + 'zGenAlbum-Project Render UUID-4TableStart-478', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-479', + 'zAlbumList-Needs Reordering Number-480', + 'zGenAlbum-zENT- Entity-481', + 'ParentzGenAlbum-Kind-482', + 'zGenAlbum-Album Kind-483', + 'SWYConverszGenAlbum-Album Kind-484', + 'ParentzGenAlbum-Cloud-Local-State-485', + 'zGenAlbum-Cloud_Local_State-486', + 'SWYConverszGenAlbum-Cloud_Local_State-487', + 'ParentzGenAlbum- Title-488', + 'zGenAlbum- Title-User&System Applied-489', + 'SWYConverszGenAlbum- Title -User&System Applied-490', + 'zGenAlbum-Import Session ID-SWY-491', + 'zAsset- Conversation= zGenAlbum_zPK-492', + 'SWYConverszGenAlbum- Import Session ID-SWY-493', + 'zGenAlbum-Imported by Bundle Identifier-494', + 'SWYzGenAlbum-Imported by Bundle Identifier-495', + 'SWYConverszGenAlbum- Syndicate-496', + ('ParentzGenAlbum-Creation Date - datetime-497', 'datetime'), + ('zGenAlbum-Creation Date - datetime-498', 'datetime'), + ('SWYConverszGenAlbum-Creation Date - datetime-499', 'datetime'), + ('zGenAlbum-Cloud Creation Date - datetime-500', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date - datetime-501', 'datetime'), + ('zGenAlbum-Start Date - datetime-502', 'datetime'), + ('SWYConverszGenAlbum-Start Date - datetime-503', 'datetime'), + ('zGenAlbum-End Date - datetime-504', 'datetime'), + ('SWYConverszGenAlbum-End Date - datetime-505', 'datetime'), + ('zGenAlbum-Cloud Subscription Date - datetime-506', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date - datetime-507', 'datetime'), + ('zShare-Cloud Subscription Date-CMM - datetime-508', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL - datetime-509', 'datetime'), + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-510', + 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-511', + 'ParentzGenAlbum-Pending Items Count-512', + 'zGenAlbum-Pending Items Count-513', + 'SWYConverszGenAlbum-Pending Items Count-514', + 'ParentzGenAlbum-Pending Items Type-515', + 'zGenAlbum-Pending Items Type-516', + 'SWYConverszGenAlbum-Pending Items Type-517', + 'zGenAlbum- Cached Photos Count-518', + 'SWYConverszGenAlbum- Cached Photos Count-519', + 'zGenAlbum- Cached Videos Count-520', + 'SWYConverszGenAlbum- Cached Videos Count-521', + 'zGenAlbum- Cached Count-522', + 'SWYConverszGenAlbum- Cached Count-523', + 'ParentzGenAlbum-Sync Event Order Key-524', + 'zGenAlbum-Sync Event Order Key-525', + 'SWYConverszGenAlbum-Sync Event Order Key-526', + 'zGenAlbum-Has Unseen Content-527', + 'SWYConverszGenAlbum-Has Unseen Content-528', + 'zGenAlbum-Unseen Asset Count-529', + 'SWYConverszGenAlbum-Unseen Asset Count-530', + 'zGenAlbum-is Owned-531', + 'SWYConverszGenAlbum-is Owned-532', + 'zGenAlbum-Cloud Relationship State-533', + 'SWYConverszGenAlbum-Cloud Relationship State-534', + 'zGenAlbum-Cloud Relationship State Local-535', + 'SWYConverszGenAlbum-Cloud Relationship State Local-536', + 'zGenAlbum-Cloud Owner Mail Key-537', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-538', + 'zGenAlbum-Cloud Owner Frist Name-539', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-540', + 'zGenAlbum-Cloud Owner Last Name-541', + 'SWYConverszGenAlbum-Cloud Owner Last Name-542', + 'zGenAlbum-Cloud Owner Full Name-543', + 'SWYConverszGenAlbum-Cloud Owner Full Name-544', + 'zGenAlbum-Cloud Person ID-545', + 'SWYConverszGenAlbum-Cloud Person ID-546', + 'zShare-Cloud Person ID-CMM-547', + 'SPLzShare-Cloud Person ID-SPL-548', + 'zAsset-Cloud Owner Hashed Person ID-549', + 'zGenAlbum-Cloud Owner Hashed Person ID-550', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-551', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-552', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-553', + 'zGenAlbum-Cloud Multi-Contributors Enabled-554', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-555', + 'zGenAlbum-Cloud Album Sub Type-556', + 'SWYConverszGenAlbum-Cloud Album Sub Type-557', + ('zGenAlbum-Cloud Contribution Date - datetime-558', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date - datetime-559', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date - datetime-560', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date - datetime-561', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-562', + 'SWYConverszGenAlbum-Cloud Notification Enabled-563', + 'ParentzGenAlbum-Pinned-564', + 'zGenAlbum-Pinned-565', + 'SWYConverszGenAlbum-Pinned-566', + 'ParentzGenAlbum-Custom Sort Key-567', + 'zGenAlbum-Custom Sort Key-568', + 'SWYConverszGenAlbum-Custom Sort Key-569', + 'ParentzGenAlbum-Custom Sort Ascending-570', + 'zGenAlbum-Custom Sort Ascending-571', + 'SWYConverszGenAlbum-Custom Sort Ascending-572', + 'ParentzGenAlbum-Is Prototype-573', + 'zGenAlbum-Is Prototype-574', + 'SWYConverszGenAlbum-Is Prototype-575', + 'ParentzGenAlbum-Project Document Type-576', + 'zGenAlbum-Project Document Type-577', + 'SWYConverszGenAlbum-Project Document Type-578', + 'ParentzGenAlbum-Custom Query Type-579', + 'zGenAlbum-Custom Query Type-580', + 'SWYConverszGenAlbum-Custom Query Type-581', + 'ParentzGenAlbum-Trashed State-582', + ('ParentzGenAlbum-Trash Date - datetime-583', 'datetime'), + 'zGenAlbum-Trashed State-584', + ('zGenAlbum-Trash Date - datetime-585', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-586', + ('SWYConverszGenAlbum-Trash Date - datetime-587', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-588', + 'zGenAlbum-Cloud Delete State-589', + 'SWYConverszGenAlbum-Cloud Delete State-590', + 'zGenAlbum-Cloud Owner Whitelisted-591', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-592', + 'zGenAlbum-Cloud Local Public URL Enabled-593', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-594', + 'zGenAlbum-Cloud Public URL Enabled-595', + 'zGenAlbum-Public URL-596', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-597', + 'SWYConverszGenAlbum-Public URL-598', + 'zGenAlbum-Key Asset Face Thumb Index-599', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-600', + 'zGenAlbum-Project Text Extension ID-601', + 'SWYConverszGenAlbum-Project Text Extension ID-602', + 'zGenAlbum-User Query Data-603', + 'SWYConverszGenAlbum-User Query Data-604', + 'zGenAlbum-Custom Query Parameters-605', + 'SWYConverszGenAlbum-Custom Query Parameters-606', + 'zGenAlbum-Project Data-607', + 'SWYConverszGenAlbum-Project Data-608', + 'zGenAlbum-Search Index Rebuild State-609', + 'SWYConverszGenAlbum-Search Index Rebuild State-610', + 'zGenAlbum-Duplicate Type-611', + 'SWYConverszGenAlbum-Duplicate Type-612', + 'zGenAlbum-Privacy State-613', + 'SWYConverszGenAlbum-Privacy State-614', + 'zCldShareAlbumInvRec-zUUID-4TableStart-615', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-616', + 'zCldShareAlbumInvRec-Invitation State Local-617', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-618', + ('zCldShareAlbumInvRec-Subscription Date - datetime-619', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-620', + 'zCldShareAlbumInvRec-Invitee Last Name-621', + 'zCldShareAlbumInvRec-Invitee Full Name-622', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-623', + 'zCldShareAlbumInvRec-Invitee Email Key-624', + 'zGenAlbum-Key Asset Face ID-625', + 'zFaceCrop-Face Area Points-626', + 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-627', + 'zAsset-Face Adjustment Version-628', + 'zAddAssetAttr-Face Regions HEX-629', + 'zAddAssetAttr-Face Analysis Version-630', + 'zDetFace-Asset Visible-631', + 'zDetFacePrint-Data HEX-632', + 'zPerson-Contact Matching Dictionary HEX-633', + 'zPerson-Face Count-634', + 'zDetFace-Face Crop-635', + 'zDetFace-Face Algorithm Version-636', + 'zDetFace-Adjustment Version-637', + 'zDetFace-UUID-4TableStart-638', + 'zPerson-Person UUID-4TableStart-639', + 'zPerson-Is_Me_Confidence-4TableStart-640', + 'zPerson - MD ID-641', + 'zPerson - Asset Sort Order-642', + 'zDetFace-Confirmed Face Crop Generation State-643', + 'zDetFace-Manual-644', + 'zDetFace-Detection Type-645', + 'zPerson-Detection Type-646', + 'zDetFace-VIP Model Type-647', + 'zDetFace-Name Source-648', + 'zDetFace-Cloud Name Source-649', + 'zPerson-Merge Candidate Confidence-650', + 'zPerson-Person URI-651', + 'zPerson-Display Name-652', + 'zPerson-Full Name-653', + 'zPerson-Cloud Verified Type-654', + 'zFaceCrop-State-655', + 'zFaceCrop-Type-656', + 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-657', + 'zFaceCrop-UUID-4TableStart-658', + 'zPerson-Type-659', + 'zPerson-Verified Type-660', + 'zPerson-Gender Type-661', + 'zDetFace-Gender Type-662', + 'zDetFace-Center X-663', + 'zDetFace-Center Y-664', + 'zPerson-Age Type Estimate-665', + 'zDetFace-Age Type Estimate-666', + 'zDetFace-Ethnicity Type-667', + 'zDetFace-Skin Tone Type-668', + 'zDetFace-Hair Type-669', + 'zDetFace-Hair Color Type-670', + 'zDetFace-Head Gear Type-671', + 'zDetFace-Facial Hair Type-672', + 'zDetFace-Has Face Mask-673', + 'zDetFace-Pose Type-674', + 'zDetFace-Face Expression Type-675', + 'zDetFace-Has Smile-676', + 'zDetFace-Smile Type-677', + 'zDetFace-Lip Makeup Type-678', + 'zDetFace-Eyes State-679', + 'zDetFace-Is Left Eye Closed-680', + 'zDetFace-Is Right Eye Closed-681', + 'zDetFace-Gaze Center X-682', + 'zDetFace-Gaze Center Y-683', + 'zDetFace-Face Gaze Type-684', + 'zDetFace-Eye Glasses Type-685', + 'zDetFace-Eye Makeup Type-686', + 'zDetFace-Cluster Squence Number Key-687', + 'zDetFace-Grouping ID-688', + 'zDetFace-Master ID-689', + 'zDetFace-Quality-690', + 'zDetFace-Quality Measure-691', + 'zDetFace-Source Height-692', + 'zDetFace-Source Width-693', + 'zDetFace-Hidden-Asset Hidden-694', + 'zDetFace-In Trash-Recently Deleted-695', + 'zDetFace-Cloud Local State-696', + 'zDetFace-Training Type-697', + 'zDetFace.Pose Yaw-698', + 'zDetFace-Body Center X-699', + 'zDetFace-Body Center Y-700', + 'zDetFace-Body Height-701', + 'zDetFace-Body Width-702', + 'zDetFace-Roll-703', + 'zDetFace-Size-704', + 'zDetFace-Cluster Squence Number-705', + 'zDetFace-Blur Score-706', + 'zDetFacePrint-Face Print Version-707', + 'zMedAnlyAstAttr-Face Count-708', + 'zDetFaceGroup-UUID-4TableStart-709', + 'zDetFaceGroup-Person Builder State-710', + 'zDetFaceGroup-UnNamed Face Count-711', + 'zPerson-In Person Naming Model-712', + 'zPerson-Key Face Pick Source Key-713', + 'zPerson-Manual Order Key-714', + 'zPerson-Question Type-715', + 'zPerson-Suggested For Client Type-716', + 'zPerson-Merge Target Person-717', + 'zPerson-Cloud Local State-718', + 'zFaceCrop-Cloud Local State-719', + 'zFaceCrop-Cloud Type-720', + 'zPerson-Cloud Delete State-721', + 'zFaceCrop-Cloud Delete State-722', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-723', + 'zAsset-Highlight Visibility Score-724', + 'zMemory-UUID-4TableStart-725', + 'zMemory-AssetListPredicte-726', + 'zMemory-Score-727', + 'zMemory-SubTitle-728', + 'zMemory-Title-729', + 'zMemory-Category-730', + 'zMemory-SubCategory-731', + ('zMemory-Creation Date - datetime-732', 'datetime'), + ('zMemory-Last Enrichment Date - datetime-733', 'datetime'), + 'zMemory-User Action Options-734', + 'zMemory-Favorite Memory-735', + 'zMemory-View Count-736', + 'zMemory-Play Count-737', + 'zMemory-Rejected-738', + 'zMemory-Share Count-739', + 'zMemory-Sharing Composition-740', + 'zMemory-PhotosGraphData-HEX NSKeyed Plist-741', + 'zMemory-MovieAssetState-HEX NSKeyed Plist-742', + 'zMemory-MovieData-HEX NSKeyed Plist-743', + ('zMemory-Last Movie Play Date - datetime-744', 'datetime'), + ('zMemory-Last Viewed Date - datetime-745', 'datetime'), + 'zMemory-Pending Play Count Memory-746', + 'zMemory-Pending Share Count Memory-747', + 'zMemory-Pending View Count Memory-748', + 'zMemory-Pending State-749', + 'zMemory-Featured State-750', + 'zMemory-Photos Graph Version-751', + 'zMemory-Graph Memory Identifier-752', + 'zMemory-Notification State-753', + 'zMemory-Cloud Local State-754', + 'zMemory-Cloud Delete State-755', + 'zMemory-Story Color Grade Kind-756', + 'zMemory-Story Serialized Title Category-757', + 'zMemory-Syndicated Content State-758', + 'zMemory-Search Index Rebuild State-759', + 'zMemory-Black Listed Feature-760', + 'zMoment-UUID-4TableStart-761', + 'zMoment-Aggregation Score-762', + ('zMoment-Start Date - datetime-763', 'datetime'), + ('zMoment-Representative Date - datetime-764', 'datetime'), + 'zMoment-Timezone Offset-765', + ('zMoment-Modification Date - datetime-766', 'datetime'), + ('zMoment-End Date - datetime-767', 'datetime'), + 'zMoment-SubTitle-768', + 'zMoment-Localized Location Names-769', + 'zMoment-Title-770', + 'zMoment-Originator State-771', + 'zMoment-Sharing Composition-772', + 'zMoment-Cached Count Shared-773', + 'zMoment-Processed Location-774', + 'zMoment-Approx Latitude-775', + 'zMoment-Approx Longitude-776', + 'zMoment-GPS Horizontal Accuracy-777', + 'zMoment-Cache Count-778', + 'zMoment-Cached Photos Count-779', + 'zMoment-Cached Videos Count-780', + 'zMoment-Trashed State-781', + 'SBKAzSugg-UUID-4TableStart-782', + 'SBKAzSugg-Suggestion Context-783', + 'SBKAzSugg-Sharing Composition-784', + ('SBKAzSugg-Start Date - datetime-785', 'datetime'), + 'SBKAzSugg-State-786', + 'SBKAzSugg-Featured State-787', + 'SBKAzSugg- Available Features-788', + 'SBKAzSugg-Notification State-789', + ('SBKAzSugg-Creation Date - datetime-790', 'datetime'), + ('SBKAzSugg-End Date - datetime-791', 'datetime'), + ('SBKAzSugg-Activation Date - datetime-792', 'datetime'), + ('SBKAzSugg-Expunge Date - datetime-793', 'datetime'), + ('SBKAzSugg-Relevant Until Date - datetime-794', 'datetime'), + 'SBKAzSugg-Title-795', + 'SBKAzSugg-Sub Title-796', + 'SBKAzSugg-Cached Count-797', + 'SBKAzSugg-Cahed Photos Count-798', + 'SBKAzSugg-Cached Videos Count-799', + 'SBKAzSugg-Type-800', + 'SBKAzSugg-Sub Type-801', + 'SBKAzSugg-Action Data-802', + 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-803', + 'SBKAzSugg-Version-804', + 'SBKAzSugg-Cloud Local State-805', + 'SBKAzSugg-Cloud Delete State-806', + 'SBRAzSugg-UUID-4TableStart-807', + 'SBRAzSugg-Suggestion Context-808', + 'SBRAzSugg-Sharing Composition-809', + ('SBRAzSugg-Start Date - datetime-810', 'datetime'), + 'SBRAzSugg-State-811', + 'SBRAzSugg-Featured State-812', + 'SBRAzSugg- Available Features-813', + 'SBRAzSugg-Notification State-814', + ('SBRAzSugg-Creation Date - datetime-815', 'datetime'), + ('SBRAzSugg-End Date - datetime-816', 'datetime'), + ('SBRAzSugg-Activation Date - datetime-817', 'datetime'), + ('SBRAzSugg-Expunge Date - datetime-818', 'datetime'), + ('SBRAzSugg-Relevant Until Date - datetime-819', 'datetime'), + 'SBRAzSugg-Title-820', + 'SBRAzSugg-Sub Title-821', + 'SBRAzSugg-Cached Count-822', + 'SBRAzSugg-Cahed Photos Count-823', + 'SBRAzSugg-Cached Videos Count-824', + 'SBRAzSugg-Type-825', + 'SBRAzSugg-Sub Type-826', + 'SBRAzSugg-Action Data-827', + 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-828', + 'SBRAzSugg-Version-829', + 'SBRAzSugg-Cloud Local State-830', + 'SBRAzSugg-Cloud Delete State-831', + 'zMedAnlyAstAttr-Media Analysis Version-832', + 'zMedAnlyAstAttr-Audio Classification-833', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-834', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-835', + 'zMedAnlyAstAttr-Best Video Range Duration Value-836', + 'zMedAnlyAstAttr-Best Video Range Start Value-837', + 'zMedAnlyAstAttr-Packed Best Playback Rect-838', + 'zMedAnlyAstAttr-Activity Score-839', + 'zMedAnlyAstAttr-Video Score-840', + 'zMedAnlyAstAttr-Audio Score-841', + 'zMedAnlyAstAttr-Wallpaper Score-842', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-843', + 'zMedAnlyAstAttr-Blurriness Score-844', + 'zMedAnlyAstAttr-Exposure Score-845', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-846', + 'zMedAnlyAstAttr-Probable Rotation Direction-847', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-848', + 'zMedAnlyAstAttr-Color Normalization Data-849', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-850', + 'zMedAnlyAstAttr-Image_Caption_Version-851', + 'zMedAnlyAstAttr-Video_Caption_Version-852', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-853', + 'zAssetAnalyState-Asset UUID-4TableStart-854', + 'zAssetAnalyState-Analyisis State-855', + 'zAssetAnalyState-Worker Flags-856', + 'zAssetAnalyState-Worker Type-857', + ('zAssetAnalyState-Ignore Until Date - datetime-858', 'datetime'), + ('zAssetAnalyState-Last Ignored Date - datetime-859', 'datetime'), + 'zAssetAnalyState-Sort Token-860', + 'zMedAnlyAstAttr-Character Recognition Attr-861', + 'zCharRecogAttr-Algorithm Version-862', + 'zCharRecogAttr-Adjustment Version-863', + 'zCharRecogAttr-Character Recogition Data-HEX-864', + 'zCharRecogAttr-Machine Readable Code Data-HEX-865', + 'zMedAnlyAstAttr-Visual Search Attributes-866', + 'zVisualSearchAttr-Algorithm Version-867', + 'zVisualSearchAttr-Adjustment Version-868', + 'zVisualSearchAttr-Visual Search Data-HEX-869', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-870', + 'zVisualSearchAttr - Sticker Confidence Score-871', + 'zAsset-Sticker Confidence Score-872', + 'zAsset-Overall Aesthetic Score-873', + 'zCompAssetAttr-Failure Score zCompAssetAttr-874', + 'zCompAssetAttr-Harmonious Color Score-875', + 'zCompAssetAttr-Immersiveness Score-876', + 'zCompAssetAttr-Intersting Subject Score-877', + 'zCompAssetAttr-Intrusive Object Presence Score-878', + 'zCompAssetAttr-Lively Color Score-879', + 'zCompAssetAttr-Low Light-880', + 'zCompAssetAttr-Noise Score-881', + 'zCompAssetAttr-Pleasant Camera Tilt Score-882', + 'zCompAssetAttr-Pleasant Composition Score-883', + 'zCompAssetAttr-Pleasant Lighting Score-884', + 'zCompAssetAttr-Pleasant Pattern Score-885', + 'zCompAssetAttr-Pleasant Perspective Score-886', + 'zCompAssetAttr-Pleasant Post Processing Score-887', + 'zCompAssetAttr-Pleasant Reflection Score-888', + 'zCompAssetAttrPleasant Symmetry Score-889', + 'zCompAssetAttr-Sharply Focused Subject Score-890', + 'zCompAssetAttr-Tastfully Blurred Score-891', + 'zCompAssetAttr-Well Chosen Subject Score-892', + 'zCompAssetAttr-Well Framed Subject Score-893', + 'zCompAssetAttr-Well Timeed Shot Score-894', + 'zCldRes-Asset UUID-4TableStart-895', + 'zCldRes-Cloud Local State-896', + 'zCldRes-File Size-897', + 'zCldRes-Height-898', + 'zCldRes-Is Available-899', + 'zCldRes-Is Locally Available-900', + 'zCldRes-Prefetch Count-901', + 'zCldRes-Source Type-902', + 'zCldRes-Type-903', + 'zCldRes-Width-904', + 'zCldRes-Date Created-905', + 'zCldRes-Last OnDemand Download Date-906', + 'zCldRes-Last Prefetch Date-907', + 'zCldRes-Prunedat-908', + 'zCldRes-File Path-909', + 'zCldRes-Fingerprint-910', + 'zCldRes-Item ID-911', + 'zCldRes-UniID-912', + 'zUserFeedback-UUID-4TableStart-913', + 'zUserFeedback-Feature-914', + 'zUserFeedback-Type-915', + 'zUserFeedback-Last Modified Date-916', + 'zUserFeedback-Context-917', + 'zUserFeedback-Cloud Local State-918', + 'zUserFeedback-Cloud Delete State-919', + 'zUserFeedback - Creation Type-920', + 'zAddAssetAttr-zPK-921', + 'zAddAssetAttr-zENT-922', + 'ZAddAssetAttr-zOPT-923', + 'zAddAssetAttr-zAsset= zAsset_zPK-924', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-925', + 'zAddAssetAttr-Original Stable Hash-4Queryend-926', + 'zAddAssetAttr-Public Global UUID-927', + 'zAddAssetAttr-Deferred Photo Identifier-928', + 'zAddAssetAttr-Original Assets UUID-929', + 'zAddAssetAttr-Import Session ID-930', + 'zAddAssetAttr-Originating Asset Identifier-4endquery-931', + 'zAddAssetAttr.Adjusted Stable Hash-4endquery-932', + 'zAlbumList-zPK= Album List Key-933', + 'zAlbumList-zENT-934', + 'zAlbumList-zOPT-935', + 'zAlbumList-ID Key-936', + 'zAlbumList-UUID-937', + 'zAsset-zPK-938', + 'zAsset-zENT-939', + 'zAsset-zOPT-940', + 'zAsset-Master= zCldMast-zPK-941', + 'zAsset-Extended Attributes= zExtAttr-zPK-942', + 'zAsset-Import Session Key-943', + 'zAsset-Trashed by Participant= zSharePartic_zPK-944', + 'zAsset-Photo Analysis Attributes Key-945', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-946', + 'zAsset-FOK-Cloud Feed Asset Entry Key-947', + 'zAsset-Moment Share Key= zShare-zPK-948', + 'zAsset-zMoment Key= zMoment-zPK-949', + 'zAsset-Computed Attributes Asset Key-950', + 'zAsset-Highlight Being Assets-HBA Key-951', + 'zAsset-Highlight Being Extended Assets-HBEA Key-952', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-953', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-954', + 'zAsset-Highligh Being Summary Assets-HBSA Key-955', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-956', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-957', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-958', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-959', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-960', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-961', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-962', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-963', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-964', + 'zAsset-Promotion Score-965', + 'zAsset-Iconic Score-966', + 'zAsset-Media Analysis Attributes Key-967', + 'zAsset-Media Group UUID-968', + 'zAsset-UUID = store.cloudphotodb-969', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-970', + 'zAsset.Cloud Collection GUID-971', + 'zAsset-Avalanche UUID-972', + 'zAssetAnalyState-zPK-973', + 'zAssetAnalyState-zEnt-974', + 'zAssetAnalyState-zOpt-975', + 'zAssetAnalyState-Asset= zAsset-zPK-976', + 'zAssetAnalyState-Asset UUID-977', + 'zAsstContrib-zPK-978', + 'zAsstContrib-zEnt-979', + 'zAsstContrib-zOpt-980', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-981', + 'zAsstContrib-Participant= zSharePartic-zPK-982', + 'zAssetDes-zPK-983', + 'zAssetDes-zENT-984', + 'zAssetDes-zOPT-985', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-986', + 'zEdIPTCAttr-Asset Attributes= zAddAssetAttr.zPK-987', + 'zEdIPTCAttr-Action Advised-988', + 'zEdIPTCAttr-Audio Duration-989', + 'zEdIPTCAttr-Audio Outcue-990', + 'zEdIPTCAttr-Audio Sampling Rate-991', + 'zEdIPTCAttr-Audio Sampling Res-992', + 'zEdIPTCAttr-Audion Type-993', + 'zEdIPTCAttr-ByLine-994', + 'zEdIPTCAttr-ByLine Title-995', + 'zEdIPTCAttr-Caption-996', + 'zEdIPTCAttr-Category-997', + 'zEdIPTCAttr-CIADR City-998', + 'zEdIPTCAttr-CIADR Ctry-999', + 'zEdIPTCAttr-CIADR ExtAdr-1000', + 'zEdIPTCAttr-CIADR PCode-1001', + 'zEdIPTCAttr-CIADR Region-1002', + 'zEdIPTCAttr-CiEmailWork-1003', + 'zEdIPTCAttr-CiTeLWork-1004', + 'zEdIPTCAttr-CiURLWork-1005', + 'zEdIPTCAttr-City-1006', + 'zEdIPTCAttr-Contact-1007', + 'zEdIPTCAttr-Content LocationCode-1008', + 'zEdIPTCAttr-Content LocationName-1009', + 'zEdIPTCAttr-Copy Right Notice-1010', + 'zEdIPTCAttr-Cntry Primary LocationCode-1011', + 'zEdIPTCAttr-Cntry Primary LocationName-1012', + 'zEdIPTCAttr-Creator ContactInfo-1013', + 'zEdIPTCAttr-Credit-1014', + 'zEdIPTCAttr-DateCreated-TEXT-1015', + 'zEdIPTCAttr-Dig Creation Date - TEXT-1016', + 'zEdIPTCAttr-Dig Creation Time - TEXT-1017', + 'zEdIPTCAttr-Dig SourceType-1018', + 'zEdIPTCAttr-EditStatus-1019', + 'zEdIPTCAttr-EditorAL Update-1020', + 'zEdIPTCAttr-Exp Date - TEXT-1021', + 'zEdIPTCAttr-Exp Time - TEXT-1022', + 'zEdIPTCAttr-Fixture ID-1023', + 'zEdIPTCAttr-Headline-1024', + 'zEdIPTCAttr-Image Orientation-1025', + 'zEdIPTCAttr-Image Type-1026', + 'zEdIPTCAttr-Keywords-1027', + 'zEdIPTCAttr-Language ID-1028', + 'zEdIPTCAttr-Obj Attr Reference-1029', + 'zEdIPTCAttr-Obj Cycle-1030', + 'zEdIPTCAttr-Obj Name-1031', + 'zEdIPTCAttr-Obj Type Ref-1032', + 'zEdIPTCAttr-Org Transmission Ref-1033', + 'zEdIPTCAttr-Orginating Program-1034', + 'zEdIPTCAttr-Program Version-1035', + 'zEdIPTCAttr-Province State-1036', + 'zEdIPTCAttr-RefDate - TEXT-1037', + 'zEdIPTCAttr-RefNumber-1038', + 'zEdIPTCAttr-RefService-1039', + 'zEdIPTCAttr-Release Date - TEXT-1040', + 'zEdIPTCAttr-Release Time - TEXT-1041', + 'zEdIPTCAttr-Scene-1042', + 'zEdIPTCAttr-Source-1043', + 'zEdIPTCAttr-Spec Instructions-1044', + 'zEdIPTCAttr-Star Rating-1045', + 'zEdIPTCAttr-SubLocation-1046', + 'zEdIPTCAttr-Subject Ref-1047', + 'zEdIPTCAttr-Supplemental Category-1048', + 'zEdIPTCAttr-Time Created - TEXT-1049', + 'zEdIPTCAttr-Urgency-1050', + 'zEdIPTCAttr-Usage Terms-1051', + 'zEdIPTCAttr-Writer Editor-1052', + 'zEdIPTCAttr-Data - BLOB-1053', + 'zCharRecogAttr-zPK-1054', + 'zCharRecogAttr-zENT-1055', + 'zCharRecogAttr-zOPT-1056', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1057', + 'zCldFeedEnt-zPK= zCldShared keys-1058', + 'zCldFeedEnt-zENT-1059', + 'zCldFeedEnt-zOPT-1060', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1061', + 'zCldFeedEnt-Entry Invitation Record GUID-1062', + 'zCldFeedEnt-Entry Cloud Asset GUID-1063', + 'zCldMast-zPK= zAsset-Master-1064', + 'zCldMast-zENT-1065', + 'zCldMast-zOPT-1066', + 'zCldMast-Moment Share Key= zShare-zPK-1067', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1068', + 'zCldMast-Originating Asset ID-1069', + 'zCldMast-Import Session ID- AirDrop-StillTesting-1070', + 'CMzCldMastMedData-zENT-1071', + 'CMzCldMastMedData-zOPT-1072', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-1073', + 'AAAzCldMastMedData-zENT-1074', + 'AAAzCldMastMedData-zOPT-1075', + 'AAAzCldMastMedData-CldMast key-1076', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1077', + 'zCldRes-zPK-1078', + 'zCldRes-zENT-1079', + 'zCldRes-zOPT-1080', + 'zCldRes-Asset= zAsset-zPK-1081', + 'zCldRes-Cloud Master= zCldMast-zPK-1082', + 'zCldRes-Asset UUID-1083', + 'zCldShareAlbumInvRec-zPK-1084', + 'zCldShareAlbumInvRec-zEnt-1085', + 'zCldShareAlbumInvRec-zOpt-1086', + 'zCldShareAlbumInvRec-Album Key-1087', + 'zCldShareAlbumInvRec-FOK Album Key-1088', + 'zCldShareAlbumInvRec-Album GUID-1089', + 'zCldShareAlbumInvRec-zUUID-1090', + 'zCldShareAlbumInvRec-Cloud GUID-1091', + 'zCldSharedComment-zPK-1092', + 'zCldSharedComment-zENT-1093', + 'zCldSharedComment-zOPT-1094', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1095', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1096', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1097', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1098', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1099', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1100', + 'zCldSharedComment-Cloud GUID-1101', + 'zCompAssetAttr-zPK-1102', + 'zCompAssetAttr-zEnt-1103', + 'zCompAssetAttr-zOpt-1104', + 'zCompAssetAttr-Asset Key-1105', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1106', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1107', + 'zCompSyncAttr-zAsset= zAsset-zPK-1108', + 'zCompSyncAttr-zENT-1109', + 'zCompSyncAttr-zOPT-1110', + 'zDetFace-zPK-1111', + 'zDetFace-zEnt-1112', + 'zDetFace.zOpt-1113', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1114', + 'zDetFace-PersonForFace= zPerson-zPK-1115', + 'zDetFace-Person Being Key Face-1116', + 'zDetFace-Face Print-1117', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1118', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1119', + 'zDetFace-UUID-1120', + 'zDetFaceGroup-zPK-1121', + 'zDetFaceGroup-zENT-1122', + 'zDetFaceGroup-zOPT-1123', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1124', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1125', + 'zDetFaceGroup-UUID-1126', + 'zDetFacePrint-zPK-1127', + 'zDetFacePrint-zEnt-1128', + 'zDetFacePrint-zOpt-1129', + 'zDetFacePrint-Face Key-1130', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1131', + 'zExtAttr-zENT-1132', + 'zExtAttr-zOPT-1133', + 'zExtAttr-Asset Key-1134', + 'zEdIPTCAttr-zPK-1135', + 'zEdIPTCAttr-zENT-1136', + 'zEdIPTCAttr-zOPT-1137', + 'zFaceCrop-zPK-1138', + 'zFaceCrop-zEnt-1139', + 'zFaceCrop-zOpt-1140', + 'zFaceCrop-Asset Key-1141', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1142', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1143', + 'zFaceCrop-Face Key-1144', + 'zFaceCrop-UUID-1145', + 'zGenAlbum-zPK=32AlbumLists= 32Albums-1146', + 'zGenAlbum-zENT-1147', + 'zGenAlbum-zOpt-1148', + 'zGenAlbum-Custom Key Asset-1149', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1150', + 'zGenAlbum-FOK Parent Folder-1151', + 'zGenAlbum-zSyndicate-1152', + 'zGenAlbum-UUID-1153', + 'SWYConverszGenAlbum-UUID-1154', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1155', + 'SWYConverszGenAlbum-Cloud GUID-1156', + 'zGenAlbum-Project Render UUID-1157', + 'SWYConverszGenAlbum-Project Render UUID-1158', + 'zIntResou-zPK-1159', + 'zIntResou-zENT-1160', + 'zIntResou-zOPT-1161', + 'zIntResou-Asset= zAsset_zPK-1162', + 'zIntResou-Fingerprint-4Queryend-1163', + 'zIntResou-Stable Hash-4Queryend-1164', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1165', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1166', + 'zMedAnlyAstAttr-zEnt-1167', + 'zMedAnlyAstAttr-zOpt-1168', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1169', + 'zMemory-zPK-1170', + 'zMemory-zENT-1171', + 'zMemory-zOPT-1172', + 'zMemory-Key Asset= zAsset-zPK-1173', + 'zMemory-UUID-1174', + 'zMoment-zPK-1175', + 'zMoment-zENT-1176', + 'zMoment-zOPT-1177', + 'zMoment-Highlight Key-1178', + 'zMoment-UUID-1179', + 'zPerson-zPK=zDetFace-Person-1180', + 'zPerson-zEnt-1181', + 'zPerson-zOpt-1182', + 'zPerson-Share Participant= zSharePartic-zPK-1183', + 'zPerson-KeyFace=zDetFace-zPK-1184', + 'zPerson-Assoc Face Group Key-1185', + 'zPerson-Person UUID-1186', + 'zPerson-Is_Me_Confidence-1187', + 'zPhotoAnalysisAssetAttr-zPK-1188', + 'zPhotoAnalysisAssetAttr-zEnt-1189', + 'zPhotoAnalysisAssetAttr-zOpt-1190', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1191', + 'zSceneP-zPK-1192', + 'zSceneP-zENT-1193', + 'zSceneP-zOPT-1194', + 'zShare-zPK-1195', + 'zShare-zENT-1196', + 'zShare-zOPT-1197', + 'zShare-UUID-1198', + 'SPLzShare-UUID-1199', + 'zShare-Scope ID = store.cloudphotodb-1200', + 'zSharePartic-zPK-1201', + 'zSharePartic-zENT-1202', + 'zSharePartic-zOPT-1203', + 'zSharePartic-Share Key= zShare-zPK-1204', + 'zSharePartic-Person= zPerson-zPK-1205', + 'zSharePartic-UUID-1206', + 'SBKAzSugg-zPK-1207', + 'SBKAzSugg-zENT-1208', + 'SBKAzSugg-zOPT-1209', + 'SBKAzSugg-UUID-1210', + 'SBRAzSugg-zPK-1211', + 'SBRAzSugg-zENT-1212', + 'SBRAzSugg-zOPT-1213', + 'SBRAzSugg-UUID-1214', + 'z3SuggBRA-3RepAssets-1215', + 'z3SuggBRA-71SuggBeingRepAssets-1216', + 'z3SuggBKA-71SuggBeingKeyAssets= zSugg-zPK-1217', + 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1218', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1219', + 'zUnmAdj-zOPT-1220', + 'zUnmAdj-zENT-1221', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1222', + 'zUnmAdj-UUID-1223', + 'zUnmAdj-Other Adjustments Fingerprint-1224', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1225', + 'zUserFeedback-zPK-1226', + 'zUserFeedback-zENT-1227', + 'zUserFeedback-zOPT-1228', + 'zUserFeedback-Person= zPerson-zPK-1229', + 'zUserFeedback-Memory= zMemory-zPK-1230', + 'zUserFeedback-UUID-1231', + 'zVisualSearchAttr-zPK-1232', + 'zVisualSearchAttr-zENT-1233', + 'zVisualSearchAttr-zOPT-1234', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1235', + 'z32AlbumList-32Albums= zGenAlbum-zPK-1236', + 'z32AlbumList-Album List Key-1237', + 'z32AlbumList-FOK32Albums Key-1238', + 'z33Assets-33Albums= zGenAlbum-zPK-1239', + 'z33Assets-3Asset Key= zAsset-zPK in the Album-1240', + 'z33Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1241', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1242', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1243', + 'z3MemoryBCAs-56memoriesBeingCuratedAssets= zMemory-zPK-1244', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1245', + 'z3MemoryBECAs-56MemoriesBeingExtCuratedAssets= zMemory-zPK-1246', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1247', + 'z3MemoryBRAs-56RepresentativeAssets= zMemory-zPK-1248', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1249', + 'z3MemoryBUCAs-56MemoriesBeingUserCuratedAssets= zMemory-zPK-1250', + 'z3MemoryBCAs-56Memories Being Custom User Assets-1251', + 'z3MemoryBCAs-3Custom User Assets-1252', + 'z3MemoryBCAs-FOK-3Custom User Assets-1253') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph126_3iOS26RefforAssetAnalysisGenPlayPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = iOS.get_version() + if (version.parse(iosversion) <= version.parse("18.7.8")) or (version.parse(iosversion) >= version.parse("27")): + logfunc(f"Unsupported version for GenPlay-Photos.sqlite for iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-GenAI_Not_Detected Still_Testing-0' + WHEN 1 THEN '1-Apple_Image_Playground GenAI_Still_Testing-1' + WHEN 2 THEN '2-Apple_Photo_CleanUP GenAI_Still_Testing-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + zAsset.ZIMAGEREQUESTHINTS AS 'zAsset-ImageRequestHints-HEX-Path', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State -4QueryStart', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date - datetime', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll - datetime', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created - datetime', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date - datetime', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created - datetime', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date - datetime', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date - datetime', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date - datetime', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date - datetime', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files - datetime', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date - datetime', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date - datetime', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date - datetime', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + zAsset.ZLOCATIONDATA AS 'zAsset-Location Data-HEX', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State-4QueryStart', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart - datetime', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM- 4QueryStart - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL- 4QueryStart - datetime', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity- 4QueryStart', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum- Kind- 4QueryStart', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind- 4QueryStart', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT-4TableStart', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data-HEX', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT-4TableStart', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data-HEX', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camear_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Detected_Screenshot_Still_Testing-0' + WHEN 1 THEN '1-Detected_Screenshot_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Paorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr.View_Presentation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pening-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustement-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + zIntResou.ZDATASTOREKEYDATA AS 'zIntResou-DataStoreKeyData-HEX', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date - datetime', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date - datetime', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Yes-Adjustments_needs_update_Decoding-2' + WHEN 3 THEN '3-Yes-Adjustments_needs_update_Decoding-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State-Camera-Effects-Filters', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp - datetime', + DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp - datetime', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date - datetime', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', + zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zUnmAdj.ZADJUSTMENTRENDERTYPES + WHEN 0 THEN '0-Standard or Portrait with erros-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Portrait-2' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || '' + END AS 'zUnmAdj-Adjustment Render Types', + CASE zUnmAdj.ZADJUSTMENTFORMATVERSION + WHEN 1.0 THEN '1.0-Markup-1.0' + WHEN 1.1 THEN '1.1-Slow-Mo-1.1' + WHEN 1.2 THEN '1.2-StillTesting' + WHEN 1.3 THEN '1.3-StillTesting' + WHEN 1.4 THEN '1.4-Filter-1.4' + WHEN 1.5 THEN '1.5-Adjust-1.5' + WHEN 1.6 THEN '1.6-Video-Trim-1.6' + WHEN 1.7 THEN '1.7-StillTesting' + WHEN 1.8 THEN '1.8-StillTesting' + WHEN 1.9 THEN '1.9-StillTesting' + WHEN 2.0 THEN '2.0-ScreenshotServices-2.0' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' + END AS 'zUnmAdj-Adjustment Format Version', + zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version StillTesing-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date - datetime', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date - datetime', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp - datetime', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date - datetime', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp - datetime', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zSceneP.ZDATA AS 'zSceneP-Data-HEX NSKeyed Plist', + zSceneP.ZDUPLICATEMATCHINGDATA AS 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist', + zSceneP.ZDUPLICATEMATCHINGALTERNATEDATA AS 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZOBJECTSALIENCYRECTSDATA AS 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist', + zAddAssetAttr.ZORIGINALHASH AS 'zAddAssetAttr-Original Hash-HEX', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version', + DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp - datetime', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESDATA AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date - datetime', + CASE zCldFeedEnt.ZENTRYISMINE + WHEN 0 THEN '0-CldFeedEnt_Is_Mine-0' + WHEN 1 THEN '1-CldFeedEnt_IsNot_Mine-1' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYISMINE || '' + END AS 'zCldFeedEnt-Entry_Is_Mine', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPE + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPE || '' + END AS 'zCldFeedEnt-Entry Type', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date - datetime', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date - datetime', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date - datetime', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart', + SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT-CMM', + CASE SPLzShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' + END AS 'SPLzShare-zENT-SPL', + CASE zSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z66_SHARE || '' + END AS 'zSharePartic-z66SHARE', + CASE SPLzSharePartic.Z66_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z66_SHARE || '' + END AS 'SPLzSharePartic-z66SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-CMM', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-SPL', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-CMM', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-SPL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State-CMM', + CASE SPLzShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || '' + END AS 'SPLzShare-Local Publish State-SPL', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission-CMM', + CASE SPLzShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || '' + END AS 'SPLzShare-Public Permission-SPL', + CASE zShare.ZALLOWSACCESSREQUESTS + WHEN 0 THEN '0-Does Not Allow Access Requests-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZALLOWSACCESSREQUESTS || '' + END AS 'zShare-Allows Access Requests-CMM', + CASE SPLzShare.ZALLOWSACCESSREQUESTS + WHEN 0 THEN '0-Does Not Allow Access Requests-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZALLOWSACCESSREQUESTS || '' + END AS 'SPLzShare-Allows Access Requests-SPL', + CASE zShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE + WHEN 1 THEN '1-CollectionShare Cur User Contrib State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE || '' + END AS 'zShare-CollectionShare CurrentUser ContribState-CMM', + CASE SPLzShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE + WHEN 1 THEN '1-CollectionShare Cur User Contrib State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHARECURRENTUSERCONTRIBUTIONSTATE || '' + END AS 'SPLzShare-CollectionShare CurrentUser ContribState-SPL', + CASE zShare.ZCOLLECTIONSHAREEXPIRINGSTATE + WHEN 0 THEN '0-CollectionShare Expiring State-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHAREEXPIRINGSTATE || '' + END AS 'zShare-CollectionShare ExpiringState-CMM', + CASE SPLzShare.ZCOLLECTIONSHAREEXPIRINGSTATE + WHEN 0 THEN '0-CollectionShare Expiring State-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHAREEXPIRINGSTATE || '' + END AS 'SPLzShare-CollectionShare ExpiringState-SPL', + CASE zShare.ZCOLLECTIONSHAREKIND + WHEN 2 THEN '2-CollectionShare Kind-stilltesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZCOLLECTIONSHAREKIND || '' + END AS 'zShare-CollectionShare Kind-CMM', + CASE SPLzShare.ZCOLLECTIONSHAREKIND + WHEN 2 THEN '2-CollectionShare Kind-stilltesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCOLLECTIONSHAREKIND || '' + END AS 'SPLzShare-CollectionShare Kind-SPL', + CASE zShare.ZCREATIONTYPE + WHEN 0 THEN '0-Creation Type-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCREATIONTYPE || '' + END AS 'zShare-Creation Type-CMM', + CASE SPLzShare.ZCREATIONTYPE + WHEN 0 THEN '0-Creation Type-stilltesting-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCREATIONTYPE || '' + END AS 'SPLzShare-Creation Type-SPL', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM', + SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM', + SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL', + zShare.ZTITLE AS 'zShare-Title-CMM', + SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL-CMM', + SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL', + zShare.ZCLIENTBUNDLEIDENTIFIER AS 'zShare-Client BundleID-CMM', + SPLzShare.ZCLIENTBUNDLEIDENTIFIER AS 'SPLzShare-Client BundleID-SPL', + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM - datetime', + DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL - datetime', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM - datetime', + DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM- 4zShare - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL- 4zShare - datetime', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM - datetime', + DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL - datetime', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM - datetime', + DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL - datetime', + DateTime(zShare.ZLASTMODIFIEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Modified Date-CMM - datetime', + DateTime(SPLzShare.ZLASTMODIFIEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Modified Date-SPL - datetime', + zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM', + SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM', + SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL', + zShare.ZUNSEENASSETSCOUNT AS 'zShare-Unseen Assets Count-CMM', + SPLzShare.ZUNSEENASSETSCOUNT AS 'SPLzShare-Unseen Assets Count-SPL', + CASE zShare.ZUNSEENCONTENTSTATE + WHEN 1 THEN '1-Unseen Content State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZUNSEENCONTENTSTATE || '' + END AS 'zShare-Unseen Content State-CMM', + CASE SPLzShare.ZUNSEENCONTENTSTATE + WHEN 1 THEN '1-Unseen Content State-stilltesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZUNSEENCONTENTSTATE || '' + END AS 'SPLzShare-Unseen Content State-SPL', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State-CMM', + CASE SPLzShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || '' + END AS 'SPLzShare-Cloud Local State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || '' + END AS 'SPLzShare-Scope Syncing State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE1 + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE1 || '' + END AS 'zShare-Scope Syncing State1-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE1 + WHEN 0 THEN '0-ScopeNOTAllowedToSync-SPL-StillTesting-0' + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE1 || '' + END AS 'SPLzShare-Scope Syncing State1-SPL', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy-CMM', + CASE SPLzShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || '' + END AS 'SPLzShare-Auto Share Policy-SPL', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-CMM-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion-CMM', + CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'SPLzShare-Should Notify On Upload Completion-SPL', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State-CMM', + CASE SPLzShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || '' + END AS 'SPLzShare-Trashed State-SPL', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State-CMM', + CASE SPLzShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || '' + END AS 'SPLzShare-Cloud Delete State-SPL', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM - datetime', + DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL - datetime', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM - datetime', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL - datetime', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM - datetime', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL - datetime', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source-CMM', + CASE SPLzShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || '' + END AS 'SPLzShare-Exit Source-SPL', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-SPL_Exit State-CMM', + CASE SPLzShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || '' + END AS 'SPLzShare-SPL_Exit State-SPL', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type-CMM', + CASE SPLzShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || '' + END AS 'SPLzShare-Exit Type-SPL', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignor Budgets-CMM', + CASE SPLzShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'SPLzShare-Should Ignor Budgets-SPL', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State-CMM', + CASE SPLzShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || '' + END AS 'SPLzShare-Preview State-SPL', + zShare.ZPHONEINVITATIONTOKEN AS 'zShare-Phone Invitation Token-CMM', + SPLzShare.ZPHONEINVITATIONTOKEN AS 'SPLzShare-Phone Invitation Token-SPL', + zShare.ZCKSHAREDATA AS 'zShare-CK Share Data-CMM', + SPLzShare.ZCKSHAREDATA AS 'SPLzShare-CK Share Data-SPL', + zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM', + SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL', + zShare.ZRULESDATA AS 'zShare-Rules-CMM', + SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State-CMM', + CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'SPLzShare-Participant Cloud Update State-SPL', + zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart', + SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + CASE SPLzSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || '' + END AS 'SPLzSharePartic-Acceptance Status', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_This_User-0' + WHEN 1 THEN '1-Participant-Is_This_User-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'SPLzSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE SPLzSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' + END AS 'SPLzSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE SPLzSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || '' + END AS 'SPLzSharePartic-Premission', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart', + zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + zSharePartic.ZNAMECOMPONENTS AS 'zSharePartic-Name Components', + SPLzSharePartic.ZNAMECOMPONENTS AS 'SPLzSharePartic-Name Components', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE SPLzSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || '' + END AS 'SPLzSharePartic-Exit State', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date - datetime', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date - datetime', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date - datetime', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date - datetime', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date - datetime', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date - datetime', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date - datetime', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date - datetime', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date - datetime', + DateTime(zShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Cloud Subscription Date-CMM - datetime', + DateTime(SPLzShare.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Cloud Subscription Date-SPL - datetime', + zGenAlbum.ZCLOUDMETADATA AS 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist', + SWYConverszGenAlbum.ZCLOUDMETADATA AS 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'SWYConverszGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'SWYConverszGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE SWYConverszGenAlbum.ZISOWNED + WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || '' + END AS 'SWYConverszGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID', + zShare.ZCLOUDPERSONID AS 'zShare-Cloud Person ID-CMM', + SPLzShare.ZCLOUDPERSONID AS 'SPLzShare-Cloud Person ID-SPL', + zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'SWYConverszGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date - datetime', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date - datetime', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date - datetime', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Notification Enabled', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date - datetime', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date - datetime', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date - datetime', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled', + SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'SWYConverszGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE SWYConverszGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || '' + END AS 'SWYConverszGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date - datetime', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID', + CASE + WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset' + ELSE 'Face Area Points Not Detected in zAsset' + END AS 'zFaceCrop-Face Area Points', + CASE zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || '' + END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence', + zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version', + zAddAssetAttr.ZFACEREGIONS AS 'zAddAssetAttr-Face Regions HEX', + zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', + CASE zDetFace.ZASSETVISIBLE + WHEN 0 THEN 'Asset Not Visible Photo Library-0' + WHEN 1 THEN 'Asset Visible Photo Library-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || '' + END AS 'zDetFace-Asset Visible', + zDetFacePrint.ZDATA AS 'zDetFacePrint-Data HEX', + zPerson.ZCONTACTMATCHINGDICTIONARY AS 'zPerson-Contact Matching Dictionary HEX', + zPerson.ZFACECOUNT AS 'zPerson-Face Count', + zDetFace.ZFACECROP AS 'zDetFace-Face Crop', + zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version', + zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version', + zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-4TableStart', + zPerson.ZMDID AS 'zPerson - MD ID', + CASE zPerson.ZASSETSORTORDER + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || '' + END AS 'zPerson - Asset Sort Order', + CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || '' + END AS 'zDetFace-Confirmed Face Crop Generation State', + CASE zDetFace.ZMANUAL + WHEN 0 THEN 'zDetFace-Auto Detected-0' + WHEN 1 THEN 'zDetFace-Manually Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || '' + END AS 'zDetFace-Manual', + CASE zDetFace.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || '' + END AS 'zDetFace-Detection Type', + CASE zPerson.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || '' + END AS 'zPerson-Detection Type', + CASE zDetFace.ZVIPMODELTYPE + WHEN 0 THEN 'Not VIP-0' + WHEN 1 THEN 'VIP-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || '' + END AS 'zDetFace-VIP Model Type', + CASE zDetFace.ZNAMESOURCE + WHEN 0 THEN 'No Name Listed-0' + WHEN 1 THEN '1-Face Crop-1' + WHEN 2 THEN '2-Verified-Has-Person-URI' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || '' + END AS 'zDetFace-Name Source', + CASE zDetFace.ZCLOUDNAMESOURCE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN '1-User Added Via Face Crop-1' + WHEN 5 THEN '5-Asset Shared has Name' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || '' + END AS 'zDetFace-Cloud Name Source', + zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence', + zPerson.ZPERSONURI AS 'zPerson-Person URI', + zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', + zPerson.ZFULLNAME AS 'zPerson-Full Name', + CASE zPerson.ZCLOUDVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || '' + END AS 'zPerson-Cloud Verified Type', + CASE zFaceCrop.ZSTATE + WHEN 5 THEN 'Validated-5' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || '' + END AS 'zFaceCrop-State', + CASE zFaceCrop.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-Active' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || '' + END AS 'zFaceCrop-Type', + zFaceCrop.ZRESOURCEDATA AS 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart', + CASE zPerson.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || '' + END AS 'zPerson-Type', + CASE zPerson.ZVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' + END AS 'zPerson-Verified Type', + CASE zPerson.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || '' + END AS 'zPerson-Gender Type', + CASE zDetFace.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || '' + END AS 'zDetFace-Gender Type', + zDetFace.ZCENTERX AS 'zDetFace-Center X', + zDetFace.ZCENTERY AS 'zDetFace-Center Y', + CASE zPerson.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || '' + END AS 'zPerson-Age Type Estimate', + CASE zDetFace.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || '' + END AS 'zDetFace-Age Type Estimate', + CASE zDetFace.ZETHNICITYTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-African American-1' + WHEN 2 THEN 'White-2' + WHEN 3 THEN 'Hispanic-Latino-3' + WHEN 4 THEN 'Asian-4' + WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || '' + END AS 'zDetFace-Ethnicity Type', + CASE zDetFace.ZSKINTONETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Light-Pale White Skin Tone-1' + WHEN 2 THEN 'White-Fair Skin Tone-2' + WHEN 3 THEN 'Medium-White to Olive Skin Tone-3' + WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4' + WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5' + WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || '' + END AS 'zDetFace-Skin Tone Type', + CASE zDetFace.ZHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + WHEN 6 THEN '6-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || '' + END AS 'zDetFace-Hair Type', + CASE zDetFace.ZHAIRCOLORTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-Brown Hair Color-1' + WHEN 2 THEN 'Brown-Blonde Hair Color-2' + WHEN 3 THEN 'Brown-Red Hair Color-3' + WHEN 4 THEN 'Red-White Hair Color-4' + WHEN 5 THEN 'StillTesting-Artifical-5' + WHEN 6 THEN 'White-Bald Hair Color-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || '' + END AS 'zDetFace-Hair Color Type', + CASE zDetFace.ZHEADGEARTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-No Headgear' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || '' + END AS 'zDetFace-Head Gear Type', + CASE zDetFace.ZFACIALHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Clean Shaven Facial Hair Type-1' + WHEN 2 THEN 'Beard Facial Hair Type-2' + WHEN 3 THEN 'Goatee Facial Hair Type-3' + WHEN 4 THEN 'Mustache Facial Hair Type-4' + WHEN 5 THEN 'Stubble Facial Hair Type-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || '' + END AS 'zDetFace-Facial Hair Type', + CASE zDetFace.ZHASFACEMASK + WHEN 0 THEN 'No Mask-0' + WHEN 1 THEN 'Has Mask-1' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || '' + END AS 'zDetFace-Has Face Mask', + CASE zDetFace.ZPOSETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Face Frontal Pose-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN 'Face Profile Pose-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || '' + END AS 'zDetFace-Pose Type', + CASE zDetFace.ZFACEEXPRESSIONTYPE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN 'Disgusted-Angry-1' + WHEN 2 THEN 'Suprised-Fearful-2' + WHEN 3 THEN 'Neutral-3' + WHEN 4 THEN 'Confident-Smirk-4' + WHEN 5 THEN 'Happiness-5' + WHEN 6 THEN 'Sadness-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || '' + END AS 'zDetFace-Face Expression Type', + CASE zDetFace.ZHASSMILE + WHEN 0 THEN 'zDetFace No Smile-0' + WHEN 1 THEN 'zDetFace Smile-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || '' + END AS 'zDetFace-Has Smile', + CASE zDetFace.ZSMILETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'zDetFace Smile No Teeth-1' + WHEN 2 THEN 'zDetFace Smile has Teeth-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || '' + END AS 'zDetFace-Smile Type', + CASE zDetFace.ZLIPMAKEUPTYPE + WHEN 0 THEN 'zDetFace No Lip Makeup-0' + WHEN 1 THEN 'zDetFace Lip Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || '' + END AS 'zDetFace-Lip Makeup Type', + CASE zDetFace.ZEYESSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eyes Closed-1' + WHEN 2 THEN 'Eyes Open-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || '' + END AS 'zDetFace-Eyes State', + CASE zDetFace.ZISLEFTEYECLOSED + WHEN 0 THEN 'Left Eye Open-0' + WHEN 1 THEN 'Left Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || '' + END AS 'zDetFace-Is Left Eye Closed', + CASE zDetFace.ZISRIGHTEYECLOSED + WHEN 0 THEN 'Right Eye Open-0' + WHEN 1 THEN 'Right Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || '' + END AS 'zDetFace-Is Right Eye Closed', + zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X', + zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y', + CASE zDetFace.ZGAZETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || '' + END AS 'zDetFace-Face Gaze Type', + CASE zDetFace.ZGLASSESTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eye Glasses-1' + WHEN 2 THEN 'Sun Glasses-2' + WHEN 3 THEN 'No Glasses-3' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || '' + END AS 'zDetFace-Eye Glasses Type', + CASE zDetFace.ZEYEMAKEUPTYPE + WHEN 0 THEN 'No Eye Makeup-0' + WHEN 1 THEN 'Eye Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || '' + END AS 'zDetFace-Eye Makeup Type', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key', + zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID', + zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID', + zDetFace.ZQUALITY AS 'zDetFace-Quality', + zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure', + zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height', + zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width', + CASE zDetFace.ZHIDDEN + WHEN 0 THEN 'Not Hidden-0' + WHEN 1 THEN 'Hidden-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || '' + END AS 'zDetFace-Hidden-Asset Hidden', + CASE zDetFace.ZISINTRASH + WHEN 0 THEN 'Not In Trash-0' + WHEN 1 THEN 'In Trash-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || '' + END AS 'zDetFace-In Trash-Recently Deleted', + CASE zDetFace.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || '' + END AS 'zDetFace-Cloud Local State', + CASE zDetFace.ZTRAININGTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE + END AS 'zDetFace-Training Type', + zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw', + zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X', + zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y', + zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height', + zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width', + zDetFace.ZROLL AS 'zDetFace-Roll', + zDetFace.ZSIZE AS 'zDetFace-Size', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number', + zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score', + zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version', + zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart', + zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State', + zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count', + zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model', + zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key', + zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key', + zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type', + zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type', + zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person', + CASE zPerson.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Person Not Synced with Cloud-0' + WHEN 1 THEN 'Person Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE + END AS 'zPerson-Cloud Local State', + CASE zFaceCrop.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || '' + END AS 'zFaceCrop-Cloud Local State', + CASE zFaceCrop.ZCLOUDTYPE + WHEN 0 THEN 'Has Name-0' + WHEN 5 THEN 'Has Face Key-5' + WHEN 12 THEN '12-StillTesting' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || '' + END AS 'zFaceCrop-Cloud Type', + CASE zPerson.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || '' + END AS 'zPerson-Cloud Delete State', + CASE zFaceCrop.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || '' + END AS 'zFaceCrop-Cloud Delete State', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart', + zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score', + zMemory.ZUUID AS 'zMemory-UUID-4TableStart', + zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte', + zMemory.ZSCORE AS 'zMemory-Score', + zMemory.ZSUBTITLE AS 'zMemory-SubTitle', + zMemory.ZTITLE AS 'zMemory-Title', + CASE zMemory.ZCATEGORY + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 8 THEN '8-StillTesting' + WHEN 16 THEN '16-StillTesting' + WHEN 17 THEN '17-StillTesting' + WHEN 19 THEN '19-StillTesting' + WHEN 21 THEN '21-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 203 THEN '203-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 211 THEN '211-StillTesting' + WHEN 217 THEN '217-StillTesting' + WHEN 220 THEN '220-StillTesting' + WHEN 301 THEN '301-StillTesting' + WHEN 302 THEN '302-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || '' + END AS 'zMemory-Category', + CASE zMemory.ZSUBCATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 206 THEN '206-StillTesting' + WHEN 207 THEN '207-StillTesting' + WHEN 212 THEN '212-StillTesting' + WHEN 213 THEN '213-StillTesting' + WHEN 214 THEN '214-StillTesting' + WHEN 402 THEN '402-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || '' + END AS 'zMemory-SubCategory', + DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date - datetime', + DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date - datetime', + CASE zMemory.ZUSERACTIONOPTIONS + WHEN 0 THEN 'User Actions Options Memory Not User Created-0' + WHEN 1 THEN 'User Actions Options Memory User Created-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || '' + END AS 'zMemory-User Action Options', + CASE zMemory.ZFAVORITE + WHEN 0 THEN 'Memory Not Favorite-0' + WHEN 1 THEN 'Memory Favorite-1' + END AS 'zMemory-Favorite Memory', + zMemory.ZVIEWCOUNT AS 'zMemory-View Count', + zMemory.ZPLAYCOUNT AS 'zMemory-Play Count', + zMemory.ZREJECTED AS 'zMemory-Rejected', + zMemory.ZSHARECOUNT AS 'zMemory-Share Count', + zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition', + zMemory.ZPHOTOSGRAPHDATA AS 'zMemory-PhotosGraphData-HEX NSKeyed Plist', + zMemory.ZMOVIEASSETSTATE AS 'zMemory-MovieAssetState-HEX NSKeyed Plist', + zMemory.ZMOVIEDATA AS 'zMemory-MovieData-HEX NSKeyed Plist', + DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date - datetime', + DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date - datetime', + zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory', + zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory', + zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory', + zMemory.ZPENDINGSTATE AS 'zMemory-Pending State', + CASE zMemory.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || '' + END AS 'zMemory-Featured State', + zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version', + zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier', + CASE zMemory.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || '' + END AS 'zMemory-Notification State', + CASE zMemory.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Memory Not Synced with Cloud-0' + WHEN 1 THEN 'Memory Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || '' + END AS 'zMemory-Cloud Local State', + CASE zMemory.ZCLOUDDELETESTATE + WHEN 0 THEN 'Memory Not Deleted-0' + WHEN 1 THEN 'Memory Deleted-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || '' + END AS 'zMemory-Cloud Delete State', + CASE zMemory.ZSTORYCOLORGRADEKIND + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || '' + END AS 'zMemory-Story Color Grade Kind', + CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || '' + END AS 'zMemory-Story Serialized Title Category', + CASE zMemory.ZSYNDICATEDCONTENTSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || '' + END AS 'zMemory-Syndicated Content State', + CASE zMemory.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting Memory-Search Index State-0' + WHEN 1 THEN '1-StillTesting Memory-Search Index State-1' + WHEN 2 THEN '2-StillTesting Memory-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zMemory-Search Index Rebuild State', + zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature', + zMoment.ZUUID AS 'zMoment-UUID-4TableStart', + zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score', + DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date - datetime', + DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date - datetime', + zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset', + DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date - datetime', + DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date - datetime', + zMoment.ZSUBTITLE AS 'zMoment-SubTitle', + zMoment.ZLOCALIZEDLOCATIONNAMES AS 'zMoment-Localized Location Names', + zMoment.ZTITLE AS 'zMoment-Title', + CASE zMoment.ZORIGINATORSTATE + WHEN 0 THEN '0-StillTesting Moment-Originator_State-0' + WHEN 1 THEN '1-StillTesing Moment-Originator_State-1' + WHEN 2 THEN '2-StillTesting Moment-Originator_State-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || '' + END AS 'zMoment-Originator State', + CASE zMoment.ZSHARINGCOMPOSITION + WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0' + WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1' + WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || '' + END AS 'zMoment-Sharing Composition', + zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared', + CASE zMoment.ZPROCESSEDLOCATION + WHEN 2 THEN 'No-2' + WHEN 3 THEN 'Yes-3' + WHEN 6 THEN 'Yes-6' + ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || '' + END AS 'zMoment-Processed Location', + zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude', + zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude', + CASE zMoment.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zMoment.ZGPSHORIZONTALACCURACY + END AS 'zMoment-GPS Horizontal Accuracy', + zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count', + zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count', + zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count', + CASE zMoment.ZTRASHEDSTATE + WHEN 0 THEN 'zMoment Not In Trash-0' + WHEN 1 THEN 'zMoment In Trash-1' + ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || '' + END AS 'zMoment-Trashed State', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart', + SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context', + SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition', + DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date - datetime', + CASE SBKAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || '' + END AS 'SBKAzSugg-State', + CASE SBKAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || '' + END AS 'SBKAzSugg-Featured State', + CASE SBKAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBKAzSugg- Available Features', + CASE SBKAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBKAzSugg-Notification State', + DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date - datetime', + DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date - datetime', + DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date - datetime', + DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date - datetime', + DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date - datetime', + SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title', + SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title', + SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count', + SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count', + SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count', + CASE SBKAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || '' + END AS 'SBKAzSugg-Type', + CASE SBKAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || '' + END AS 'SBKAzSugg-Sub Type', + SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data', + SBKAzSugg.ZFEATURESDATA AS 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist', + SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version', + CASE SBKAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBKAzSugg-Cloud Local State', + CASE SBKAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBKAzSugg-Cloud Delete State', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart', + SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context', + SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition', + DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date - datetime', + CASE SBRAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || '' + END AS 'SBRAzSugg-State', + CASE SBRAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || '' + END AS 'SBRAzSugg-Featured State', + CASE SBRAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBRAzSugg- Available Features', + CASE SBRAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBRAzSugg-Notification State', + DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date - datetime', + DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date - datetime', + DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date - datetime', + DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date - datetime', + DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date - datetime', + SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title', + SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title', + SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count', + SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count', + SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count', + CASE SBRAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || '' + END AS 'SBRAzSugg-Type', + CASE SBRAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || '' + END AS 'SBRAzSugg-Sub Type', + SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data', + SBRAzSugg.ZFEATURESDATA AS 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist', + SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version', + CASE SBRAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBRAzSugg-Cloud Local State', + CASE SBRAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBRAzSugg-Cloud Delete State', + zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version', + zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value', + zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect', + zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score', + zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score', + zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score', + zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score', + zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score', + zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score', + zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', + zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', + zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', + zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', + zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', + zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', + DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date - datetime', + DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date - datetime', + zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', + zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', + zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', + zCharRecogAttr.ZCHARACTERRECOGNITIONDATA AS 'zCharRecogAttr-Character Recogition Data-HEX', + zCharRecogAttr.ZMACHINEREADABLECODEDATA AS 'zCharRecogAttr-Machine Readable Code Data-HEX', + zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes', + zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version', + zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version', + zVisualSearchAttr.ZVISUALSEARCHDATA AS 'zVisualSearchAttr-Visual Search Data-HEX', + zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version', + zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score', + zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', + zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score', + zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score', + zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score', + zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score', + zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score', + zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light', + zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score', + zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score', + zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score', + zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score', + zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score', + zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score', + zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score', + zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score', + zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score', + zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score', + zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score', + zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score', + zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score', + zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart', + zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State', + zCldRes.ZFILESIZE AS 'zCldRes-File Size', + zCldRes.ZHEIGHT AS 'zCldRes-Height', + zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available', + zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available', + zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count', + zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type', + zCldRes.ZTYPE AS 'zCldRes-Type', + zCldRes.ZWIDTH AS 'zCldRes-Width', + zCldRes.ZDATECREATED AS 'zCldRes-Date Created', + zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date', + zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date', + zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat', + zCldRes.ZFILEPATH AS 'zCldRes-File Path', + zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint', + zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID', + zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart', + zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature', + zUserFeedback.ZTYPE AS 'zUserFeedback-Type', + zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date', + zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context', + zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State', + zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State', + zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery', + zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', + zAlbumList.Z_ENT AS 'zAlbumList-zENT', + zAlbumList.Z_OPT AS 'zAlbumList-zOPT', + zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key', + zAlbumList.ZUUID AS 'zAlbumList-UUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK', + zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key', + zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key', + zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK', + zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt', + zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt', + zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID', + zAssetContrib.Z_PK AS 'zAsstContrib-zPK', + zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt', + zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt', + zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', + zAssetDes.Z_PK AS 'zAssetDes-zPK', + zAssetDes.Z_ENT AS 'zAssetDes-zENT', + zAssetDes.Z_OPT AS 'zAssetDes-zOPT', + zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK', + zEditedIPTCAttr.ZASSETATTRIBUTES AS 'zEdIPTCAttr-Asset Attributes= zAddAssetAttr.zPK', + zEditedIPTCAttr.ZACTIONADVISED AS 'zEdIPTCAttr-Action Advised', + zEditedIPTCAttr.ZAUDIODURATION AS 'zEdIPTCAttr-Audio Duration', + zEditedIPTCAttr.ZAUDIOOUTCUE AS 'zEdIPTCAttr-Audio Outcue', + zEditedIPTCAttr.ZAUDIOSAMPLINGRATE AS 'zEdIPTCAttr-Audio Sampling Rate', + zEditedIPTCAttr.ZAUDIOSAMPLINGRES AS 'zEdIPTCAttr-Audio Sampling Res', + zEditedIPTCAttr.ZAUDIOTYPE AS 'zEdIPTCAttr-Audion Type', + zEditedIPTCAttr.ZBYLINE AS 'zEdIPTCAttr-ByLine', + zEditedIPTCAttr.ZBYLINETITLE AS 'zEdIPTCAttr-ByLine Title', + zEditedIPTCAttr.ZCAPTION AS 'zEdIPTCAttr-Caption', + zEditedIPTCAttr.ZCATEGORY AS 'zEdIPTCAttr-Category', + zEditedIPTCAttr.ZCIADRCITY AS 'zEdIPTCAttr-CIADR City', + zEditedIPTCAttr.ZCIADRCTRY AS 'zEdIPTCAttr-CIADR Ctry', + zEditedIPTCAttr.ZCIADREXTADR AS 'zEdIPTCAttr-CIADR ExtAdr', + zEditedIPTCAttr.ZCIADRPCODE AS 'zEdIPTCAttr-CIADR PCode', + zEditedIPTCAttr.ZCIADRREGION AS 'zEdIPTCAttr-CIADR Region', + zEditedIPTCAttr.ZCIEMAILWORK AS 'zEdIPTCAttr-CiEmailWork', + zEditedIPTCAttr.ZCITELWORK AS 'zEdIPTCAttr-CiTeLWork', + zEditedIPTCAttr.ZCIURLWORK AS 'zEdIPTCAttr-CiURLWork', + zEditedIPTCAttr.ZCITY AS 'zEdIPTCAttr-City', + zEditedIPTCAttr.ZCONTACT AS 'zEdIPTCAttr-Contact', + zEditedIPTCAttr.ZCONTENTLOCATIONCODE AS 'zEdIPTCAttr-Content LocationCode', + zEditedIPTCAttr.ZCONTENTLOCATIONNAME AS 'zEdIPTCAttr-Content LocationName', + zEditedIPTCAttr.ZCOPYRIGHTNOTICE AS 'zEdIPTCAttr-Copy Right Notice', + zEditedIPTCAttr.ZCOUNTRYPRIMARYLOCATIONCODE AS 'zEdIPTCAttr-Cntry Primary LocationCode', + zEditedIPTCAttr.ZCOUNTRYPRIMARYLOCATIONNAME AS 'zEdIPTCAttr-Cntry Primary LocationName', + zEditedIPTCAttr.ZCREATORCONTACTINFO AS 'zEdIPTCAttr-Creator ContactInfo', + zEditedIPTCAttr.ZCREDIT AS 'zEdIPTCAttr-Credit', + zEditedIPTCAttr.ZDATECREATED AS 'zEdIPTCAttr-DateCreated-TEXT', + zEditedIPTCAttr.ZDIGITALCREATIONDATE AS 'zEdIPTCAttr-Dig Creation Date - TEXT', + zEditedIPTCAttr.ZDIGITALCREATIONTIME AS 'zEdIPTCAttr-Dig Creation Time - TEXT', + zEditedIPTCAttr.ZDIGITALSOURCETYPE AS 'zEdIPTCAttr-Dig SourceType', + zEditedIPTCAttr.ZEDITSTATUS AS 'zEdIPTCAttr-EditStatus', + zEditedIPTCAttr.ZEDITORIALUPDATE AS 'zEdIPTCAttr-EditorAL Update', + zEditedIPTCAttr.ZEXPIRATIONDATE AS 'zEdIPTCAttr-Exp Date - TEXT', + zEditedIPTCAttr.ZEXPIRATIONTIME AS 'zEdIPTCAttr-Exp Time - TEXT', + zEditedIPTCAttr.ZFIXTUREIDENTIFIER AS 'zEdIPTCAttr-Fixture ID', + zEditedIPTCAttr.ZHEADLINE AS 'zEdIPTCAttr-Headline', + zEditedIPTCAttr.ZIMAGEORIENTATION AS 'zEdIPTCAttr-Image Orientation', + zEditedIPTCAttr.ZIMAGETYPE AS 'zEdIPTCAttr-Image Type', + zEditedIPTCAttr.ZKEYWORDS AS 'zEdIPTCAttr-Keywords', + zEditedIPTCAttr.ZLANGUAGEIDENTIFIER AS 'zEdIPTCAttr-Language ID', + zEditedIPTCAttr.ZOBJECTATTRIBUTEREFERENCE AS 'zEdIPTCAttr-Obj Attr Reference', + zEditedIPTCAttr.ZOBJECTCYCLE AS 'zEdIPTCAttr-Obj Cycle', + zEditedIPTCAttr.ZOBJECTNAME AS 'zEdIPTCAttr-Obj Name', + zEditedIPTCAttr.ZOBJECTTYPEREFERENCE AS 'zEdIPTCAttr-Obj Type Ref', + zEditedIPTCAttr.ZORIGINALTRANSMISSIONREFERENCE AS 'zEdIPTCAttr-Org Transmission Ref', + zEditedIPTCAttr.ZORIGINATINGPROGRAM AS 'zEdIPTCAttr-Orginating Program', + zEditedIPTCAttr.ZPROGRAMVERSION AS 'zEdIPTCAttr-Program Version', + zEditedIPTCAttr.ZPROVINCESTATE AS 'zEdIPTCAttr-Province State', + zEditedIPTCAttr.ZREFERENCEDATE AS 'zEdIPTCAttr-RefDate - TEXT', + zEditedIPTCAttr.ZREFERENCENUMBER AS 'zEdIPTCAttr-RefNumber', + zEditedIPTCAttr.ZREFERENCESERVICE AS 'zEdIPTCAttr-RefService', + zEditedIPTCAttr.ZRELEASEDATE AS 'zEdIPTCAttr-Release Date - TEXT', + zEditedIPTCAttr.ZRELEASETIME AS 'zEdIPTCAttr-Release Time - TEXT', + zEditedIPTCAttr.ZSCENE AS 'zEdIPTCAttr-Scene', + zEditedIPTCAttr.ZSOURCE AS 'zEdIPTCAttr-Source', + zEditedIPTCAttr.ZSPECIALINSTRUCTIONS AS 'zEdIPTCAttr-Spec Instructions', + zEditedIPTCAttr.ZSTARRATING AS 'zEdIPTCAttr-Star Rating', + zEditedIPTCAttr.ZSUBLOCATION AS 'zEdIPTCAttr-SubLocation', + zEditedIPTCAttr.ZSUBJECTREFERENCE AS 'zEdIPTCAttr-Subject Ref', + zEditedIPTCAttr.ZSUPPLEMENTALCATEGORY AS 'zEdIPTCAttr-Supplemental Category', + zEditedIPTCAttr.ZTIMECREATED AS 'zEdIPTCAttr-Time Created - TEXT', + zEditedIPTCAttr.ZURGENCY AS 'zEdIPTCAttr-Urgency', + zEditedIPTCAttr.ZUSAGETERMS AS 'zEdIPTCAttr-Usage Terms', + zEditedIPTCAttr.ZWRITEREDITOR AS 'zEdIPTCAttr-Writer Editor', + zEditedIPTCAttr.ZDATA AS 'zEdIPTCAttr-Data - BLOB', + zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK', + zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT', + zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT', + zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zCldRes.Z_PK AS 'zCldRes-zPK', + zCldRes.Z_ENT AS 'zCldRes-zENT', + zCldRes.Z_OPT AS 'zCldRes-zOPT', + zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK', + zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID', + zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK', + zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt', + zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt', + zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key', + zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK', + zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', + zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', + zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', + zDetFace.Z_PK AS 'zDetFace-zPK', + zDetFace.Z_ENT AS 'zDetFace-zEnt', + zDetFace.Z_OPT AS 'zDetFace.zOpt', + zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face', + zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK', + zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face', + zDetFace.ZFACEPRINT AS 'zDetFace-Face Print', + zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK', + zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK', + zDetFace.ZUUID AS 'zDetFace-UUID', + zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK', + zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT', + zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT', + zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK', + zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID', + zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK', + zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt', + zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt', + zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zEditedIPTCAttr.Z_PK AS 'zEdIPTCAttr-zPK', + zEditedIPTCAttr.Z_ENT AS 'zEdIPTCAttr-zENT', + zEditedIPTCAttr.Z_OPT AS 'zEdIPTCAttr-zOPT', + zFaceCrop.Z_PK AS 'zFaceCrop-zPK', + zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt', + zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt', + zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID', + zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key', + zFaceCrop.ZFACE AS 'zFaceCrop-Face Key', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID', + zGenAlbum.Z_PK AS 'zGenAlbum-zPK=32AlbumLists= 32Albums', + zGenAlbum.Z_ENT AS 'zGenAlbum-zENT', + zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt', + zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset', + zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK', + zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder', + zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK', + zMemory.Z_PK AS 'zMemory-zPK', + zMemory.Z_ENT AS 'zMemory-zENT', + zMemory.Z_OPT AS 'zMemory-zOPT', + zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK', + zMemory.ZUUID AS 'zMemory-UUID', + zMoment.Z_PK AS 'zMoment-zPK', + zMoment.Z_ENT AS 'zMoment-zENT', + zMoment.Z_OPT AS 'zMoment-zOPT', + zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key', + zMoment.ZUUID AS 'zMoment-UUID', + zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person', + zPerson.Z_ENT AS 'zPerson-zEnt', + zPerson.Z_OPT AS 'zPerson-zOpt', + zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK', + zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', + zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', + zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', + zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', + zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', + zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK', + zSceneP.Z_PK AS 'zSceneP-zPK', + zSceneP.Z_ENT AS 'zSceneP-zENT', + zSceneP.Z_OPT AS 'zSceneP-zOPT', + zShare.Z_PK AS 'zShare-zPK', + zShare.Z_ENT AS 'zShare-zENT', + zShare.Z_OPT AS 'zShare-zOPT', + zShare.ZUUID AS 'zShare-UUID', + SPLzShare.ZUUID AS 'SPLzShare-UUID', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.Z_ENT AS 'zSharePartic-zENT', + zSharePartic.Z_OPT AS 'zSharePartic-zOPT', + zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK', + zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK', + SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT', + SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID', + SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK', + SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT', + SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', + z3SuggBRA.Z_3REPRESENTATIVESUGGESTIONASSETS AS 'z3SuggBRA-3RepAssets', + z3SuggBRA.Z_71SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-71SuggBeingRepAssets', + z3SuggBKA.Z_71SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-71SuggBeingKeyAssets= zSugg-zPK', + z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK', + zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', + zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', + zUnmAdj.Z_ENT AS 'zUnmAdj-zENT', + zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint', + zUserFeedback.Z_PK AS 'zUserFeedback-zPK', + zUserFeedback.Z_ENT AS 'zUserFeedback-zENT', + zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT', + zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK', + zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID', + zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK', + zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', + zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', + zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + z32AlbumLists.Z_32ALBUMS AS 'z32AlbumList-32Albums= zGenAlbum-zPK', + z32AlbumLists.Z_2ALBUMLISTS AS 'z32AlbumList-Album List Key', + z32AlbumLists.Z_FOK_32ALBUMS AS 'z32AlbumList-FOK32Albums Key', + z33Assets.Z_33ALBUMS AS 'z33Assets-33Albums= zGenAlbum-zPK', + z33Assets.Z_3ASSETS AS 'z33Assets-3Asset Key= zAsset-zPK in the Album', + z33Assets.Z_FOK_3ASSETS AS 'z33Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_56MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-56memoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', + z3MemoryBECAs.Z_56MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-56MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', + z3MemoryBRAs.Z_56MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-56RepresentativeAssets= zMemory-zPK', + z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', + z3MemoryBUCAs.Z_56MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-56MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_56MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-56Memories Being Custom User Assets', + z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', + z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZEDITEDIPTCATTRIBUTES zEditedIPTCAttr ON zEditedIPTCAttr.Z_PK = zAddAssetAttr.ZEDITEDIPTCATTRIBUTES + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN Z_33ASSETS z33Assets ON z33Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z33Assets.Z_33ALBUMS + LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK + LEFT JOIN Z_32ALBUMLISTS z32AlbumLists ON z32AlbumLists.Z_32ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z32AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK + LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK + LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES + LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK + LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE + LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE + LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK + LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON + LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP + LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_56MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_56MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_56MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_56MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_56MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_56MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK + LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT + LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_71SUGGESTIONSBEINGKEYASSETS + LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVESUGGESTIONASSETS = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_71SUGGESTIONSBEINGREPRESENTATIVEASSETS + ORDER BY zAsset.ZADDEDDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], + row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], + row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], + row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], + row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], + row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], + row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], + row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], + row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], + row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], + row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], + row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], + row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], + row[1248], row[1249], row[1250], row[1251], row[1252], row[1253])) + + data_headers = ('zAsset Complete-0', + 'zAsset-zPK-4QueryStart-1', + 'zAddAssetAttr-zPK-4QueryStart-2', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', + 'zAddAssetAttr-Original Stable Hash-4QueryStart-4', + 'zIntResou-Fingerprint-4QueryStart-5', + 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6', + 'zIntResou-Stable Hash-4QueryStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zExtAttr-Generative_AI_Type-21', + 'zExtAttr-Credit-22', + 'zAsset-Derived Camera Capture Device-23', + 'zAsset-Capture_Session_Identifier-24', + 'zAddAssetAttr-Camera Captured Device-25', + 'zAddAssetAttr-Imported by-26', + 'zCldMast-Imported By-27', + 'zAddAssetAttr.Imported by Bundle Identifier-28', + 'zAddAssetAttr-Imported By Display Name-29', + 'zCldMast-Imported by Bundle ID-30', + 'zCldMast-Imported by Display Name-31', + 'zAsset-ImageRequestHints-HEX-Path-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Is_Recently_Saved-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State -4QueryStart-40', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', + ('zAsset-Added Date - datetime-44', 'datetime'), + ('zAsset- SortToken -CameraRoll - datetime-45', 'datetime'), + 'zAddAssetAttr-Date Created Source-46', + ('zAsset-Date Created - datetime-47', 'datetime'), + ('zCldMast-Creation Date - datetime-48', 'datetime'), + ('zIntResou-CldMst Date Created - datetime-49', 'datetime'), + 'zAddAssetAttr-Time Zone Name-50', + 'zAddAssetAttr-Time Zone Offset-51', + 'zAddAssetAttr-Inferred Time Zone Offset-52', + 'zAddAssetAttr-EXIF-String-53', + ('zAsset-Modification Date - datetime-54', 'datetime'), + ('zAddAssetAttr-Last Viewed Date - datetime-55', 'datetime'), + ('zAsset-Last Shared Date - datetime-56', 'datetime'), + 'zCldMast-Cloud Local State-57', + ('zCldMast-Import Date - datetime-58', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files - datetime-59', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-60', + ('zAddAssetAttr-Alt Import Image Date - datetime-61', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', + ('zAsset-Cloud Batch Publish Date - datetime-63', 'datetime'), + ('zAsset-Cloud Server Publish Date - datetime-64', 'datetime'), + 'zAsset-Cloud Download Requests-65', + 'zAsset-Cloud Batch ID-66', + 'zAddAssetAttr-Upload Attempts-67', + 'zAsset-Latitude-68', + 'zExtAttr-Latitude-69', + 'zAsset-Longitude-70', + 'zExtAttr-Longitude-71', + 'zAddAssetAttr-GPS Horizontal Accuracy-72', + 'zAddAssetAttr-Location Hash-73', + 'zAsset-Location Data-HEX-74', + 'zAddAssetAttr-Reverse Location Is Valid-75', + 'zAddAssetAttr-Reverse Location Data-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'ParentzGenAlbum-UUID-4QueryStart-79', + 'zGenAlbum-UUID-4QueryStart-80', + 'SWYConverszGenAlbum-UUID-4QueryStart-81', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', + 'zGenAlbum-Cloud GUID-4QueryStart-83', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', + 'zGenAlbum-Project Render UUID-4QueryStart-87', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', + 'zGenAlbum-Cloud_Local_State-4QueryStart-90', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', + ('ParentzGenAlbum- Creation Date- 4QueryStart - datetime-92', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart - datetime-93', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart - datetime-94', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart - datetime-95', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart - datetime-96', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart - datetime-97', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart - datetime-98', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart - datetime-99', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart - datetime-100', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart - datetime-101', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart - datetime-102', 'datetime'), + ('zShare-Cloud Subscription Date-CMM- 4QueryStart - datetime-103', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL- 4QueryStart - datetime-104', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-105', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-106', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-107', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-108', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-109', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-110', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-111', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-112', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-113', + 'zGenAlbum-zENT- Entity- 4QueryStart-114', + 'ParentzGenAlbum- Kind- 4QueryStart-115', + 'zGenAlbum-Album Kind- 4QueryStart-116', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-117', + 'AAAzCldMastMedData-zOPT-4TableStart-118', + 'zAddAssetAttr-Media Metadata Type-119', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-120', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-121', + 'AAAzCldMastMedData-Data-HEX-122', + 'CldMasterzCldMastMedData-zOPT-4TableStart-123', + 'zCldMast-Media Metadata Type-124', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-125', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-126', + 'CMzCldMastMedData-Data-HEX-127', + 'zAsset-Search Index Rebuild State-128', + 'zAddAssetAttr-Syndication History-129', + 'zMedAnlyAstAttr-Syndication Processing Version-130', + 'zMedAnlyAstAttr-Syndication Processing Value-131', + 'zAsset-Orientation-132', + 'zAddAssetAttr-Original Orientation-133', + 'zAsset-Kind-134', + 'zAsset-Is_Detected_Screenshot-135', + 'zAsset-Kind-Sub-Type-136', + 'zAddAssetAttr-Cloud Kind Sub Type-137', + 'zAsset-Playback Style-138', + 'zAsset-Playback Variation-139', + 'zAddAssetAttr.View_Presentation-140', + 'zAsset-Video Duration-141', + 'zExtAttr-Duration-142', + 'zAsset-Video CP Duration-143', + 'zAddAssetAttr-Video CP Duration Time Scale-144', + 'zAsset-Video CP Visibility State-145', + 'zAddAssetAttr-Video CP Display Value-146', + 'zAddAssetAttr-Video CP Display Time Scale-147', + 'zIntResou-Datastore Class ID-148', + 'zIntResou-Local Availability-149', + 'zIntResou-Local Availability Target-150', + 'zIntResou-Cloud Local State-151', + 'zIntResou-Remote Availability-152', + 'zIntResou-Remote Availability Target-153', + 'zIntResou-Side Car Index-154', + 'zAsset-UUID = store.cloudphotodb-4TableStart-155', + 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156', + 'zIntResou-Fingerprint-4TableStart-157', + 'zIntResou-Stable Hash-4TableStart-158', + 'zIntResou- File ID-159', + 'zIntResou-Version-160', + 'zAddAssetAttr- Original-File-Size-161', + 'zIntResou-Resource Type-162', + 'zIntResou-DataStoreKeyData-HEX-163', + 'zIntResou-Datastore Sub-Type-164', + 'zIntResou-Cloud Source Type-165', + 'zIntResou-Data Length-166', + 'zIntResou-Recipe ID-167', + ('zIntResou-Cloud Last Prefetch Date - datetime-168', 'datetime'), + 'zIntResou-Cloud Prefetch Count-169', + ('zIntResou- Cloud-Last-OnDemand Download-Date - datetime-170', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', + 'zIntResou-Compact-UTI-172', + 'zAsset-Uniform Type ID-173', + 'zAsset-Original Color Space-174', + 'zCldMast-Uniform_Type_ID-175', + 'zCldMast-Full Size JPEG Source-176', + 'zAsset-HDR Gain-177', + 'zAsset-zHDR_Type-178', + 'zExtAttr-Codec-179', + 'zIntResou-Codec Four Char Code Name-180', + 'zCldMast-Codec Name-181', + 'zCldMast-Video Frame Rate-182', + 'zCldMast-Placeholder State-183', + 'zAsset-Depth_Type-184', + 'zAsset-Avalanche UUID-4TableStart-185', + 'zAsset-Avalanche_Kind-186', + 'zAsset-Avalanche_Pick_Type-BurstAsset-187', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', + 'zAddAssetAttr-Cloud Recovery State-189', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', + 'zAsset-Deferred Processing Needed-191', + 'zAsset-Video Deferred Processing Needed-192', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', + 'zAddAssetAttr-Deferred Processing Candidate Options-194', + 'zAsset-Adjustments_State-Camera-Effects-Filters-195', + 'zUnmAdj-UUID-4TableStart-196', + 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197', + 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200', + ('zAsset-Adjustment Timestamp - datetime-201', 'datetime'), + ('zUnmAdj-Adjustment Timestamp - datetime-202', 'datetime'), + ('zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date - datetime-203', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-204', + 'zUnmAdj-Editor Localized Name-205', + 'zUnmAdj-Adjustment Format ID-206', + 'zAddAssetAttr-Montage-207', + 'zUnmAdj-Adjustment Render Types-208', + 'zUnmAdj-Adjustment Format Version-209', + 'zUnmAdj-Adjustment Base Image Format-210', + 'zCompSyncAttr-Local_Analysis_Stage-211', + 'zCompSyncAttr-Cloud_Compute_State_Version-212', + 'zCompSyncAttr-Local_Analysis_Major_Version-213', + 'zAsset-Favorite-214', + 'zAsset-Hidden-215', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', + ('zAsset-Trashed Date - datetime-217', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', + 'zAsset-Delete-Reason-219', + 'zIntResou-Trash State-220', + ('zIntResou-Trashed Date - datetime-221', 'datetime'), + 'zAsset-Cloud Delete State-222', + 'zIntResou-Cloud Delete State-223', + 'zAddAssetAttr-PTP Trashed State-224', + 'zIntResou-PTP Trashed State-225', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', + ('zMedAnlyAstAttr-Media Analysis Timestamp - datetime-227', 'datetime'), + ('zAsset-Analysis State Modificaion Date - datetime-228', 'datetime'), + 'zAddAssetAttr- Pending View Count-229', + 'zAddAssetAttr- View Count-230', + 'zAddAssetAttr- Pending Play Count-231', + 'zAddAssetAttr- Play Count-232', + 'zAddAssetAttr- Pending Share Count-233', + 'zAddAssetAttr- Share Count-234', + 'zAddAssetAttr-Allowed for Analysis-235', + 'zAddAssetAttr-Scene Analysis Version-236', + 'zAddAssetAttr-Scene Analysis is From Preview-237', + ('zAddAssetAttr-Scene Analysis Timestamp - datetime-238', 'datetime'), + 'zAsset-Duplication Asset Visibility State-239', + 'zAddAssetAttr-Destination Asset Copy State-240', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', + 'zSceneP-Data-HEX NSKeyed Plist-242', + 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', + 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', + 'zCldMast-Source Master For Duplication Scope ID-246', + 'zAddAssetAttr-Source Asset For Duplication ID-247', + 'zCldMast-Source Master for Duplication ID-248', + 'zAddAssetAttr-Variation Suggestions States-249', + 'zAsset-High Frame Rate State-250', + 'zAsset-Video Key Frame Time Scale-251', + 'zAsset-Video Key Frame Value-252', + 'zAsset-Current_Sleet_Cast-253', + 'zAddAssetAttr.Sleet_Is_Reversible-254', + 'zExtAttr-Sleet_Rendering_Version-255', + 'zExtAttr-Sleet_Intensity-256', + 'zExtAttr-Sleet_Tone_Bias-257', + 'zExtAttr-Sleet_Color_Bias-258', + 'zExtAttr-Sleet_Cast-259', + 'zExtAttr-ISO-260', + 'zExtAttr-Metering Mode-261', + 'zExtAttr-Sample Rate-262', + 'zExtAttr-Track Format-263', + 'zExtAttr-White Balance-264', + 'zExtAttr-Aperture-265', + 'zExtAttr-BitRate-266', + 'zExtAttr-Exposure Bias-267', + 'zExtAttr-Frames Per Second-268', + 'zExtAttr-Shutter Speed-269', + 'zExtAttr-Slush Scene Bias-270', + 'zExtAttr-Slush Version-271', + 'zExtAttr-Slush Preset-272', + 'zExtAttr-Slush Warm Bias-273', + 'zAsset-Height-274', + 'zAddAssetAttr-Original Height-275', + 'zIntResou-Unoriented Height-276', + 'zAsset-Width-277', + 'zAddAssetAttr-Original Width-278', + 'zIntResou-Unoriented Width-279', + 'zShare-Thumbnail Image Data-280', + 'SPLzShare-Thumbnail Image Data-281', + 'zAsset-Thumbnail Index-282', + 'zAddAssetAttr-Embedded Thumbnail Height-283', + 'zAddAssetAttr-Embedded Thumbnail Length-284', + 'zAddAssetAttr-Embedded Thumbnail Offset-285', + 'zAddAssetAttr-Embedded Thumbnail Width-286', + 'zAsset-Packed Acceptable Crop Rect-287', + 'zAsset-Packed Badge Attributes-288', + 'zAsset-Packed Preferred Crop Rect-289', + 'zAsset-Curation Score-290', + 'zAsset-Camera Processing Adjustment State-291', + 'zAsset-Depth Type-292', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293', + 'zAddAssetAttr-Orig Resource Choice-294', + 'zAsset-Spatial Type-295', + 'zAddAssetAttr-Spatial Over Capture Group ID-296', + 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297', + 'zAddAssetAttr-Original Hash-HEX-298', + 'zAddAssetAttr-Place Annotation Data-299', + 'zAddAssetAttr-Distance Identity-300', + 'zAddAssetAttr-Edited IPTC Attributes-301', + 'zAssetDes-Long Description-302', + 'zAddAssetAttr-Asset Description-303', + 'zAddAssetAttr-Title-Comments via Cloud Website-304', + 'zAddAssetAttr-Accessibility Description-305', + 'zAddAssetAttr-Photo Stream Tag ID-306', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp - datetime-308', 'datetime'), + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309', + ('zCldFeedEnt-Entry Date - datetime-310', 'datetime'), + 'zCldFeedEnt-Entry_Is_Mine-311', + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314', + 'zCldFeedEnt-Entry Priority Number-315', + 'zCldFeedEnt-Entry Type-316', + 'zCldSharedComment-Cloud GUID-4TableStart-317', + ('zCldSharedComment-Date - datetime-318', 'datetime'), + ('zCldSharedComment-Comment Client Date - datetime-319', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date - datetime-320', 'datetime'), + 'zCldSharedComment-Type-321', + 'zCldSharedComment-Comment Text-322', + 'zCldSharedComment-Commenter Hashed Person ID-323', + 'zCldSharedComment-Batch Comment-324', + 'zCldSharedComment-Is a Caption-325', + 'zAsset-Cloud Has Comments by Me-326', + 'zCldSharedComment-Is My Comment-327', + 'zCldSharedComment-Is Deletable-328', + 'zAsset-Cloud Has Comments Conversation-329', + 'zAsset-Cloud Has Unseen Comments-330', + 'zCldSharedComment-Liked-331', + 'zAddAssetAttr-Share Type-332', + 'zAsset-Library Scope Share State- StillTesting-333', + 'zAsset-Active Library Scope Participation State-334', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-335', + 'zShare-UUID-CMM-4TableStart-336', + 'SPLzShare-UUID-SPL-4TableStart-337', + 'zShare-zENT-CMM-338', + 'SPLzShare-zENT-SPL-339', + 'zSharePartic-z66SHARE-340', + 'SPLzSharePartic-z66SHARE-341', + 'zShare-Status-CMM-342', + 'zShare-Status-SPL-343', + 'zShare-Scope Type-CMM-344', + 'zShare-Scope Type-SPL-345', + 'zShare-Local Publish State-CMM-346', + 'SPLzShare-Local Publish State-SPL-347', + 'zShare-Public Permission-CMM-348', + 'SPLzShare-Public Permission-SPL-349', + 'zShare-Allows Access Requests-CMM-350', + 'SPLzShare-Allows Access Requests-SPL-351', + 'zShare-CollectionShare CurrentUser ContribState-CMM-352', + 'SPLzShare-CollectionShare CurrentUser ContribState-SPL-353', + 'zShare-CollectionShare ExpiringState-CMM-354', + 'SPLzShare-CollectionShare ExpiringState-SPL-355', + 'zShare-CollectionShare Kind-CMM-356', + 'SPLzShare-CollectionShare Kind-SPL-357', + 'zShare-Creation Type-CMM-358', + 'SPLzShare-Creation Type-SPL-359', + 'zShare-Originating Scope ID-CMM-360', + 'SPLzShare-Originating Scope ID-SPL-361', + 'zShare-Scope ID-CMM-362', + 'SPLzShare-Scope ID-SPL-363', + 'zShare-Title-CMM-364', + 'SPLzShare-Title-SPL-365', + 'zShare-Share URL-CMM-366', + 'SPLzShare-Share URL-SPL-367', + 'zShare-Client BundleID-CMM-368', + 'SPLzShare-Client BundleID-SPL-369', + ('zShare-Creation Date-CMM - datetime-370', 'datetime'), + ('SPLzShare-Creation Date-SPL - datetime-371', 'datetime'), + ('zShare-Start Date-CMM - datetime-372', 'datetime'), + ('SPLzShare-Start Date-SPL - datetime-373', 'datetime'), + ('zShare-Cloud Subscription Date-CMM- 4zShare - datetime-374', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL- 4zShare - datetime-375', 'datetime'), + ('zShare-End Date-CMM - datetime-376', 'datetime'), + ('SPLzShare-End Date-SPL - datetime-377', 'datetime'), + ('zShare-Expiry Date-CMM - datetime-378', 'datetime'), + ('SPLzShare-Expiry Date-SPL - datetime-379', 'datetime'), + ('zShare-Last Modified Date-CMM - datetime-380', 'datetime'), + ('SPLzShare-Last Modified Date-SPL - datetime-381', 'datetime'), + 'zShare-Cloud Item Count-CMM-382', + 'SPLzShare-Cloud Item Count-SPL-383', + 'zShare-Asset Count-CMM-384', + 'SPLzShare-Asset Count-SPL-385', + 'zShare-Cloud Photo Count-CMM-386', + 'SPLzShare-Cloud Photo Count-SPL-387', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-388', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-389', + 'zShare-Photos Count-CMM-390', + 'SPLzShare-Photos Count-CMM-SPL-391', + 'zShare-Cloud Video Count-CMM-392', + 'SPLzShare-Cloud Video Count-SPL-393', + 'zShare-Videos Count-CMM-394', + 'SPLzShare-Videos Count-SPL-395', + 'zShare-Unseen Assets Count-CMM-396', + 'SPLzShare-Unseen Assets Count-SPL-397', + 'zShare-Unseen Content State-CMM-398', + 'SPLzShare-Unseen Content State-SPL-399', + 'zShare-Force Sync Attempted-CMM-400', + 'SPLzShare-Force Sync Attempted-SPL-401', + 'zShare-Cloud Local State-CMM-402', + 'SPLzShare-Cloud Local State-SPL-403', + 'zShare-Scope Syncing State-CMM-404', + 'SPLzShare-Scope Syncing State-SPL-405', + 'zShare-Scope Syncing State1-CMM-406', + 'SPLzShare-Scope Syncing State1-SPL-407', + 'zShare-Auto Share Policy-CMM-408', + 'SPLzShare-Auto Share Policy-SPL-409', + 'zShare-Should Notify On Upload Completion-CMM-410', + 'SPLzShare-Should Notify On Upload Completion-SPL-411', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-412', + 'zShare-Trashed State-CMM-413', + 'SPLzShare-Trashed State-SPL-414', + 'zShare-Cloud Delete State-CMM-415', + 'SPLzShare-Cloud Delete State-SPL-416', + ('zShare-Trashed Date-CMM - datetime-417', 'datetime'), + ('SPLzShare-Trashed Date-SPL - datetime-418', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM - datetime-419', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL - datetime-420', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM - datetime-421', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL - datetime-422', 'datetime'), + 'zShare-Exit Source-CMM-423', + 'SPLzShare-Exit Source-SPL-424', + 'zShare-SPL_Exit State-CMM-425', + 'SPLzShare-SPL_Exit State-SPL-426', + 'zShare-Exit Type-CMM-427', + 'SPLzShare-Exit Type-SPL-428', + 'zShare-Should Ignor Budgets-CMM-429', + 'SPLzShare-Should Ignor Budgets-SPL-430', + 'zShare-Preview State-CMM-431', + 'SPLzShare-Preview State-SPL-432', + 'zShare-Phone Invitation Token-CMM-433', + 'SPLzShare-Phone Invitation Token-SPL-434', + 'zShare-CK Share Data-CMM-435', + 'SPLzShare-CK Share Data-SPL-436', + 'zShare-Preview Data-CMM-437', + 'SPLzShare-Preview Data-SPL-438', + 'zShare-Rules-CMM-439', + 'SPLzShare-Rules-SPL-440', + 'zShare-Thumbnail Image Data-CMM-441', + 'SPLzShare-Thumbnail Image Data-SPL-442', + 'zShare-Participant Cloud Update State-CMM-443', + 'SPLzShare-Participant Cloud Update State-SPL-444', + 'zSharePartic-UUID-4TableStart-445', + 'SPLzSharePartic-UUID-4TableStart-446', + 'zSharePartic-Acceptance Status-447', + 'SPLzSharePartic-Acceptance Status-448', + 'zSharePartic-Is Current User-449', + 'SPLzSharePartic-Is Current User-450', + 'zSharePartic-Role-451', + 'SPLzSharePartic-Role-452', + 'zSharePartic-Premission-453', + 'SPLzSharePartic-Premission-454', + 'zSharePartic-Participant ID-455', + 'SPLzSharePartic-Participant ID-456', + 'zSharePartic-User ID-457', + 'SPLzSharePartic-User ID-458', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-459', + 'SPLzSharePartic-zPK-4TableStart-460', + 'zSharePartic-zPK-4TableStart-461', + 'zSharePartic-Email Address-462', + 'SPLzSharePartic-Email Address-463', + 'zSharePartic-Phone Number-464', + 'SPLzSharePartic-Phone Number-465', + 'zSharePartic-Name Components-466', + 'SPLzSharePartic-Name Components-467', + 'zSharePartic-Exit State-468', + 'SPLzSharePartic-Exit State-469', + 'ParentzGenAlbum-UUID-4TableStart-470', + 'zGenAlbum-UUID-4TableStart-471', + 'SWYConverszGenAlbum-UUID-4TableStart-472', + 'ParentzGenAlbum-Cloud GUID-4TableStart-473', + 'zGenAlbum-Cloud GUID-4TableStart-474', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-475', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-476', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-477', + 'zGenAlbum-Project Render UUID-4TableStart-478', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-479', + 'zAlbumList-Needs Reordering Number-480', + 'zGenAlbum-zENT- Entity-481', + 'ParentzGenAlbum-Kind-482', + 'zGenAlbum-Album Kind-483', + 'SWYConverszGenAlbum-Album Kind-484', + 'ParentzGenAlbum-Cloud-Local-State-485', + 'zGenAlbum-Cloud_Local_State-486', + 'SWYConverszGenAlbum-Cloud_Local_State-487', + 'ParentzGenAlbum- Title-488', + 'zGenAlbum- Title-User&System Applied-489', + 'SWYConverszGenAlbum- Title -User&System Applied-490', + 'zGenAlbum-Import Session ID-SWY-491', + 'zAsset- Conversation= zGenAlbum_zPK-492', + 'SWYConverszGenAlbum- Import Session ID-SWY-493', + 'zGenAlbum-Imported by Bundle Identifier-494', + 'SWYzGenAlbum-Imported by Bundle Identifier-495', + 'SWYConverszGenAlbum- Syndicate-496', + ('ParentzGenAlbum-Creation Date - datetime-497', 'datetime'), + ('zGenAlbum-Creation Date - datetime-498', 'datetime'), + ('SWYConverszGenAlbum-Creation Date - datetime-499', 'datetime'), + ('zGenAlbum-Cloud Creation Date - datetime-500', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date - datetime-501', 'datetime'), + ('zGenAlbum-Start Date - datetime-502', 'datetime'), + ('SWYConverszGenAlbum-Start Date - datetime-503', 'datetime'), + ('zGenAlbum-End Date - datetime-504', 'datetime'), + ('SWYConverszGenAlbum-End Date - datetime-505', 'datetime'), + ('zGenAlbum-Cloud Subscription Date - datetime-506', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date - datetime-507', 'datetime'), + ('zShare-Cloud Subscription Date-CMM - datetime-508', 'datetime'), + ('SPLzShare-Cloud Subscription Date-SPL - datetime-509', 'datetime'), + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-510', + 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-511', + 'ParentzGenAlbum-Pending Items Count-512', + 'zGenAlbum-Pending Items Count-513', + 'SWYConverszGenAlbum-Pending Items Count-514', + 'ParentzGenAlbum-Pending Items Type-515', + 'zGenAlbum-Pending Items Type-516', + 'SWYConverszGenAlbum-Pending Items Type-517', + 'zGenAlbum- Cached Photos Count-518', + 'SWYConverszGenAlbum- Cached Photos Count-519', + 'zGenAlbum- Cached Videos Count-520', + 'SWYConverszGenAlbum- Cached Videos Count-521', + 'zGenAlbum- Cached Count-522', + 'SWYConverszGenAlbum- Cached Count-523', + 'ParentzGenAlbum-Sync Event Order Key-524', + 'zGenAlbum-Sync Event Order Key-525', + 'SWYConverszGenAlbum-Sync Event Order Key-526', + 'zGenAlbum-Has Unseen Content-527', + 'SWYConverszGenAlbum-Has Unseen Content-528', + 'zGenAlbum-Unseen Asset Count-529', + 'SWYConverszGenAlbum-Unseen Asset Count-530', + 'zGenAlbum-is Owned-531', + 'SWYConverszGenAlbum-is Owned-532', + 'zGenAlbum-Cloud Relationship State-533', + 'SWYConverszGenAlbum-Cloud Relationship State-534', + 'zGenAlbum-Cloud Relationship State Local-535', + 'SWYConverszGenAlbum-Cloud Relationship State Local-536', + 'zGenAlbum-Cloud Owner Mail Key-537', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-538', + 'zGenAlbum-Cloud Owner Frist Name-539', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-540', + 'zGenAlbum-Cloud Owner Last Name-541', + 'SWYConverszGenAlbum-Cloud Owner Last Name-542', + 'zGenAlbum-Cloud Owner Full Name-543', + 'SWYConverszGenAlbum-Cloud Owner Full Name-544', + 'zGenAlbum-Cloud Person ID-545', + 'SWYConverszGenAlbum-Cloud Person ID-546', + 'zShare-Cloud Person ID-CMM-547', + 'SPLzShare-Cloud Person ID-SPL-548', + 'zAsset-Cloud Owner Hashed Person ID-549', + 'zGenAlbum-Cloud Owner Hashed Person ID-550', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-551', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-552', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-553', + 'zGenAlbum-Cloud Multi-Contributors Enabled-554', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-555', + 'zGenAlbum-Cloud Album Sub Type-556', + 'SWYConverszGenAlbum-Cloud Album Sub Type-557', + ('zGenAlbum-Cloud Contribution Date - datetime-558', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date - datetime-559', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date - datetime-560', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date - datetime-561', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-562', + 'SWYConverszGenAlbum-Cloud Notification Enabled-563', + 'ParentzGenAlbum-Pinned-564', + 'zGenAlbum-Pinned-565', + 'SWYConverszGenAlbum-Pinned-566', + 'ParentzGenAlbum-Custom Sort Key-567', + 'zGenAlbum-Custom Sort Key-568', + 'SWYConverszGenAlbum-Custom Sort Key-569', + 'ParentzGenAlbum-Custom Sort Ascending-570', + 'zGenAlbum-Custom Sort Ascending-571', + 'SWYConverszGenAlbum-Custom Sort Ascending-572', + 'ParentzGenAlbum-Is Prototype-573', + 'zGenAlbum-Is Prototype-574', + 'SWYConverszGenAlbum-Is Prototype-575', + 'ParentzGenAlbum-Project Document Type-576', + 'zGenAlbum-Project Document Type-577', + 'SWYConverszGenAlbum-Project Document Type-578', + 'ParentzGenAlbum-Custom Query Type-579', + 'zGenAlbum-Custom Query Type-580', + 'SWYConverszGenAlbum-Custom Query Type-581', + 'ParentzGenAlbum-Trashed State-582', + ('ParentzGenAlbum-Trash Date - datetime-583', 'datetime'), + 'zGenAlbum-Trashed State-584', + ('zGenAlbum-Trash Date - datetime-585', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-586', + ('SWYConverszGenAlbum-Trash Date - datetime-587', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-588', + 'zGenAlbum-Cloud Delete State-589', + 'SWYConverszGenAlbum-Cloud Delete State-590', + 'zGenAlbum-Cloud Owner Whitelisted-591', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-592', + 'zGenAlbum-Cloud Local Public URL Enabled-593', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-594', + 'zGenAlbum-Cloud Public URL Enabled-595', + 'zGenAlbum-Public URL-596', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-597', + 'SWYConverszGenAlbum-Public URL-598', + 'zGenAlbum-Key Asset Face Thumb Index-599', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-600', + 'zGenAlbum-Project Text Extension ID-601', + 'SWYConverszGenAlbum-Project Text Extension ID-602', + 'zGenAlbum-User Query Data-603', + 'SWYConverszGenAlbum-User Query Data-604', + 'zGenAlbum-Custom Query Parameters-605', + 'SWYConverszGenAlbum-Custom Query Parameters-606', + 'zGenAlbum-Project Data-607', + 'SWYConverszGenAlbum-Project Data-608', + 'zGenAlbum-Search Index Rebuild State-609', + 'SWYConverszGenAlbum-Search Index Rebuild State-610', + 'zGenAlbum-Duplicate Type-611', + 'SWYConverszGenAlbum-Duplicate Type-612', + 'zGenAlbum-Privacy State-613', + 'SWYConverszGenAlbum-Privacy State-614', + 'zCldShareAlbumInvRec-zUUID-4TableStart-615', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-616', + 'zCldShareAlbumInvRec-Invitation State Local-617', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-618', + ('zCldShareAlbumInvRec-Subscription Date - datetime-619', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-620', + 'zCldShareAlbumInvRec-Invitee Last Name-621', + 'zCldShareAlbumInvRec-Invitee Full Name-622', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-623', + 'zCldShareAlbumInvRec-Invitee Email Key-624', + 'zGenAlbum-Key Asset Face ID-625', + 'zFaceCrop-Face Area Points-626', + 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-627', + 'zAsset-Face Adjustment Version-628', + 'zAddAssetAttr-Face Regions HEX-629', + 'zAddAssetAttr-Face Analysis Version-630', + 'zDetFace-Asset Visible-631', + 'zDetFacePrint-Data HEX-632', + 'zPerson-Contact Matching Dictionary HEX-633', + 'zPerson-Face Count-634', + 'zDetFace-Face Crop-635', + 'zDetFace-Face Algorithm Version-636', + 'zDetFace-Adjustment Version-637', + 'zDetFace-UUID-4TableStart-638', + 'zPerson-Person UUID-4TableStart-639', + 'zPerson-Is_Me_Confidence-4TableStart-640', + 'zPerson - MD ID-641', + 'zPerson - Asset Sort Order-642', + 'zDetFace-Confirmed Face Crop Generation State-643', + 'zDetFace-Manual-644', + 'zDetFace-Detection Type-645', + 'zPerson-Detection Type-646', + 'zDetFace-VIP Model Type-647', + 'zDetFace-Name Source-648', + 'zDetFace-Cloud Name Source-649', + 'zPerson-Merge Candidate Confidence-650', + 'zPerson-Person URI-651', + 'zPerson-Display Name-652', + 'zPerson-Full Name-653', + 'zPerson-Cloud Verified Type-654', + 'zFaceCrop-State-655', + 'zFaceCrop-Type-656', + 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-657', + 'zFaceCrop-UUID-4TableStart-658', + 'zPerson-Type-659', + 'zPerson-Verified Type-660', + 'zPerson-Gender Type-661', + 'zDetFace-Gender Type-662', + 'zDetFace-Center X-663', + 'zDetFace-Center Y-664', + 'zPerson-Age Type Estimate-665', + 'zDetFace-Age Type Estimate-666', + 'zDetFace-Ethnicity Type-667', + 'zDetFace-Skin Tone Type-668', + 'zDetFace-Hair Type-669', + 'zDetFace-Hair Color Type-670', + 'zDetFace-Head Gear Type-671', + 'zDetFace-Facial Hair Type-672', + 'zDetFace-Has Face Mask-673', + 'zDetFace-Pose Type-674', + 'zDetFace-Face Expression Type-675', + 'zDetFace-Has Smile-676', + 'zDetFace-Smile Type-677', + 'zDetFace-Lip Makeup Type-678', + 'zDetFace-Eyes State-679', + 'zDetFace-Is Left Eye Closed-680', + 'zDetFace-Is Right Eye Closed-681', + 'zDetFace-Gaze Center X-682', + 'zDetFace-Gaze Center Y-683', + 'zDetFace-Face Gaze Type-684', + 'zDetFace-Eye Glasses Type-685', + 'zDetFace-Eye Makeup Type-686', + 'zDetFace-Cluster Squence Number Key-687', + 'zDetFace-Grouping ID-688', + 'zDetFace-Master ID-689', + 'zDetFace-Quality-690', + 'zDetFace-Quality Measure-691', + 'zDetFace-Source Height-692', + 'zDetFace-Source Width-693', + 'zDetFace-Hidden-Asset Hidden-694', + 'zDetFace-In Trash-Recently Deleted-695', + 'zDetFace-Cloud Local State-696', + 'zDetFace-Training Type-697', + 'zDetFace.Pose Yaw-698', + 'zDetFace-Body Center X-699', + 'zDetFace-Body Center Y-700', + 'zDetFace-Body Height-701', + 'zDetFace-Body Width-702', + 'zDetFace-Roll-703', + 'zDetFace-Size-704', + 'zDetFace-Cluster Squence Number-705', + 'zDetFace-Blur Score-706', + 'zDetFacePrint-Face Print Version-707', + 'zMedAnlyAstAttr-Face Count-708', + 'zDetFaceGroup-UUID-4TableStart-709', + 'zDetFaceGroup-Person Builder State-710', + 'zDetFaceGroup-UnNamed Face Count-711', + 'zPerson-In Person Naming Model-712', + 'zPerson-Key Face Pick Source Key-713', + 'zPerson-Manual Order Key-714', + 'zPerson-Question Type-715', + 'zPerson-Suggested For Client Type-716', + 'zPerson-Merge Target Person-717', + 'zPerson-Cloud Local State-718', + 'zFaceCrop-Cloud Local State-719', + 'zFaceCrop-Cloud Type-720', + 'zPerson-Cloud Delete State-721', + 'zFaceCrop-Cloud Delete State-722', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-723', + 'zAsset-Highlight Visibility Score-724', + 'zMemory-UUID-4TableStart-725', + 'zMemory-AssetListPredicte-726', + 'zMemory-Score-727', + 'zMemory-SubTitle-728', + 'zMemory-Title-729', + 'zMemory-Category-730', + 'zMemory-SubCategory-731', + ('zMemory-Creation Date - datetime-732', 'datetime'), + ('zMemory-Last Enrichment Date - datetime-733', 'datetime'), + 'zMemory-User Action Options-734', + 'zMemory-Favorite Memory-735', + 'zMemory-View Count-736', + 'zMemory-Play Count-737', + 'zMemory-Rejected-738', + 'zMemory-Share Count-739', + 'zMemory-Sharing Composition-740', + 'zMemory-PhotosGraphData-HEX NSKeyed Plist-741', + 'zMemory-MovieAssetState-HEX NSKeyed Plist-742', + 'zMemory-MovieData-HEX NSKeyed Plist-743', + ('zMemory-Last Movie Play Date - datetime-744', 'datetime'), + ('zMemory-Last Viewed Date - datetime-745', 'datetime'), + 'zMemory-Pending Play Count Memory-746', + 'zMemory-Pending Share Count Memory-747', + 'zMemory-Pending View Count Memory-748', + 'zMemory-Pending State-749', + 'zMemory-Featured State-750', + 'zMemory-Photos Graph Version-751', + 'zMemory-Graph Memory Identifier-752', + 'zMemory-Notification State-753', + 'zMemory-Cloud Local State-754', + 'zMemory-Cloud Delete State-755', + 'zMemory-Story Color Grade Kind-756', + 'zMemory-Story Serialized Title Category-757', + 'zMemory-Syndicated Content State-758', + 'zMemory-Search Index Rebuild State-759', + 'zMemory-Black Listed Feature-760', + 'zMoment-UUID-4TableStart-761', + 'zMoment-Aggregation Score-762', + ('zMoment-Start Date - datetime-763', 'datetime'), + ('zMoment-Representative Date - datetime-764', 'datetime'), + 'zMoment-Timezone Offset-765', + ('zMoment-Modification Date - datetime-766', 'datetime'), + ('zMoment-End Date - datetime-767', 'datetime'), + 'zMoment-SubTitle-768', + 'zMoment-Localized Location Names-769', + 'zMoment-Title-770', + 'zMoment-Originator State-771', + 'zMoment-Sharing Composition-772', + 'zMoment-Cached Count Shared-773', + 'zMoment-Processed Location-774', + 'zMoment-Approx Latitude-775', + 'zMoment-Approx Longitude-776', + 'zMoment-GPS Horizontal Accuracy-777', + 'zMoment-Cache Count-778', + 'zMoment-Cached Photos Count-779', + 'zMoment-Cached Videos Count-780', + 'zMoment-Trashed State-781', + 'SBKAzSugg-UUID-4TableStart-782', + 'SBKAzSugg-Suggestion Context-783', + 'SBKAzSugg-Sharing Composition-784', + ('SBKAzSugg-Start Date - datetime-785', 'datetime'), + 'SBKAzSugg-State-786', + 'SBKAzSugg-Featured State-787', + 'SBKAzSugg- Available Features-788', + 'SBKAzSugg-Notification State-789', + ('SBKAzSugg-Creation Date - datetime-790', 'datetime'), + ('SBKAzSugg-End Date - datetime-791', 'datetime'), + ('SBKAzSugg-Activation Date - datetime-792', 'datetime'), + ('SBKAzSugg-Expunge Date - datetime-793', 'datetime'), + ('SBKAzSugg-Relevant Until Date - datetime-794', 'datetime'), + 'SBKAzSugg-Title-795', + 'SBKAzSugg-Sub Title-796', + 'SBKAzSugg-Cached Count-797', + 'SBKAzSugg-Cahed Photos Count-798', + 'SBKAzSugg-Cached Videos Count-799', + 'SBKAzSugg-Type-800', + 'SBKAzSugg-Sub Type-801', + 'SBKAzSugg-Action Data-802', + 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-803', + 'SBKAzSugg-Version-804', + 'SBKAzSugg-Cloud Local State-805', + 'SBKAzSugg-Cloud Delete State-806', + 'SBRAzSugg-UUID-4TableStart-807', + 'SBRAzSugg-Suggestion Context-808', + 'SBRAzSugg-Sharing Composition-809', + ('SBRAzSugg-Start Date - datetime-810', 'datetime'), + 'SBRAzSugg-State-811', + 'SBRAzSugg-Featured State-812', + 'SBRAzSugg- Available Features-813', + 'SBRAzSugg-Notification State-814', + ('SBRAzSugg-Creation Date - datetime-815', 'datetime'), + ('SBRAzSugg-End Date - datetime-816', 'datetime'), + ('SBRAzSugg-Activation Date - datetime-817', 'datetime'), + ('SBRAzSugg-Expunge Date - datetime-818', 'datetime'), + ('SBRAzSugg-Relevant Until Date - datetime-819', 'datetime'), + 'SBRAzSugg-Title-820', + 'SBRAzSugg-Sub Title-821', + 'SBRAzSugg-Cached Count-822', + 'SBRAzSugg-Cahed Photos Count-823', + 'SBRAzSugg-Cached Videos Count-824', + 'SBRAzSugg-Type-825', + 'SBRAzSugg-Sub Type-826', + 'SBRAzSugg-Action Data-827', + 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-828', + 'SBRAzSugg-Version-829', + 'SBRAzSugg-Cloud Local State-830', + 'SBRAzSugg-Cloud Delete State-831', + 'zMedAnlyAstAttr-Media Analysis Version-832', + 'zMedAnlyAstAttr-Audio Classification-833', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-834', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-835', + 'zMedAnlyAstAttr-Best Video Range Duration Value-836', + 'zMedAnlyAstAttr-Best Video Range Start Value-837', + 'zMedAnlyAstAttr-Packed Best Playback Rect-838', + 'zMedAnlyAstAttr-Activity Score-839', + 'zMedAnlyAstAttr-Video Score-840', + 'zMedAnlyAstAttr-Audio Score-841', + 'zMedAnlyAstAttr-Wallpaper Score-842', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-843', + 'zMedAnlyAstAttr-Blurriness Score-844', + 'zMedAnlyAstAttr-Exposure Score-845', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-846', + 'zMedAnlyAstAttr-Probable Rotation Direction-847', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-848', + 'zMedAnlyAstAttr-Color Normalization Data-849', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-850', + 'zMedAnlyAstAttr-Image_Caption_Version-851', + 'zMedAnlyAstAttr-Video_Caption_Version-852', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-853', + 'zAssetAnalyState-Asset UUID-4TableStart-854', + 'zAssetAnalyState-Analyisis State-855', + 'zAssetAnalyState-Worker Flags-856', + 'zAssetAnalyState-Worker Type-857', + ('zAssetAnalyState-Ignore Until Date - datetime-858', 'datetime'), + ('zAssetAnalyState-Last Ignored Date - datetime-859', 'datetime'), + 'zAssetAnalyState-Sort Token-860', + 'zMedAnlyAstAttr-Character Recognition Attr-861', + 'zCharRecogAttr-Algorithm Version-862', + 'zCharRecogAttr-Adjustment Version-863', + 'zCharRecogAttr-Character Recogition Data-HEX-864', + 'zCharRecogAttr-Machine Readable Code Data-HEX-865', + 'zMedAnlyAstAttr-Visual Search Attributes-866', + 'zVisualSearchAttr-Algorithm Version-867', + 'zVisualSearchAttr-Adjustment Version-868', + 'zVisualSearchAttr-Visual Search Data-HEX-869', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-870', + 'zVisualSearchAttr - Sticker Confidence Score-871', + 'zAsset-Sticker Confidence Score-872', + 'zAsset-Overall Aesthetic Score-873', + 'zCompAssetAttr-Failure Score zCompAssetAttr-874', + 'zCompAssetAttr-Harmonious Color Score-875', + 'zCompAssetAttr-Immersiveness Score-876', + 'zCompAssetAttr-Intersting Subject Score-877', + 'zCompAssetAttr-Intrusive Object Presence Score-878', + 'zCompAssetAttr-Lively Color Score-879', + 'zCompAssetAttr-Low Light-880', + 'zCompAssetAttr-Noise Score-881', + 'zCompAssetAttr-Pleasant Camera Tilt Score-882', + 'zCompAssetAttr-Pleasant Composition Score-883', + 'zCompAssetAttr-Pleasant Lighting Score-884', + 'zCompAssetAttr-Pleasant Pattern Score-885', + 'zCompAssetAttr-Pleasant Perspective Score-886', + 'zCompAssetAttr-Pleasant Post Processing Score-887', + 'zCompAssetAttr-Pleasant Reflection Score-888', + 'zCompAssetAttrPleasant Symmetry Score-889', + 'zCompAssetAttr-Sharply Focused Subject Score-890', + 'zCompAssetAttr-Tastfully Blurred Score-891', + 'zCompAssetAttr-Well Chosen Subject Score-892', + 'zCompAssetAttr-Well Framed Subject Score-893', + 'zCompAssetAttr-Well Timeed Shot Score-894', + 'zCldRes-Asset UUID-4TableStart-895', + 'zCldRes-Cloud Local State-896', + 'zCldRes-File Size-897', + 'zCldRes-Height-898', + 'zCldRes-Is Available-899', + 'zCldRes-Is Locally Available-900', + 'zCldRes-Prefetch Count-901', + 'zCldRes-Source Type-902', + 'zCldRes-Type-903', + 'zCldRes-Width-904', + 'zCldRes-Date Created-905', + 'zCldRes-Last OnDemand Download Date-906', + 'zCldRes-Last Prefetch Date-907', + 'zCldRes-Prunedat-908', + 'zCldRes-File Path-909', + 'zCldRes-Fingerprint-910', + 'zCldRes-Item ID-911', + 'zCldRes-UniID-912', + 'zUserFeedback-UUID-4TableStart-913', + 'zUserFeedback-Feature-914', + 'zUserFeedback-Type-915', + 'zUserFeedback-Last Modified Date-916', + 'zUserFeedback-Context-917', + 'zUserFeedback-Cloud Local State-918', + 'zUserFeedback-Cloud Delete State-919', + 'zUserFeedback - Creation Type-920', + 'zAddAssetAttr-zPK-921', + 'zAddAssetAttr-zENT-922', + 'ZAddAssetAttr-zOPT-923', + 'zAddAssetAttr-zAsset= zAsset_zPK-924', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-925', + 'zAddAssetAttr-Original Stable Hash-4Queryend-926', + 'zAddAssetAttr-Public Global UUID-927', + 'zAddAssetAttr-Deferred Photo Identifier-928', + 'zAddAssetAttr-Original Assets UUID-929', + 'zAddAssetAttr-Import Session ID-930', + 'zAddAssetAttr-Originating Asset Identifier-4endquery-931', + 'zAddAssetAttr.Adjusted Stable Hash-4endquery-932', + 'zAlbumList-zPK= Album List Key-933', + 'zAlbumList-zENT-934', + 'zAlbumList-zOPT-935', + 'zAlbumList-ID Key-936', + 'zAlbumList-UUID-937', + 'zAsset-zPK-938', + 'zAsset-zENT-939', + 'zAsset-zOPT-940', + 'zAsset-Master= zCldMast-zPK-941', + 'zAsset-Extended Attributes= zExtAttr-zPK-942', + 'zAsset-Import Session Key-943', + 'zAsset-Trashed by Participant= zSharePartic_zPK-944', + 'zAsset-Photo Analysis Attributes Key-945', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-946', + 'zAsset-FOK-Cloud Feed Asset Entry Key-947', + 'zAsset-Moment Share Key= zShare-zPK-948', + 'zAsset-zMoment Key= zMoment-zPK-949', + 'zAsset-Computed Attributes Asset Key-950', + 'zAsset-Highlight Being Assets-HBA Key-951', + 'zAsset-Highlight Being Extended Assets-HBEA Key-952', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-953', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-954', + 'zAsset-Highligh Being Summary Assets-HBSA Key-955', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-956', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-957', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-958', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-959', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-960', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-961', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-962', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-963', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-964', + 'zAsset-Promotion Score-965', + 'zAsset-Iconic Score-966', + 'zAsset-Media Analysis Attributes Key-967', + 'zAsset-Media Group UUID-968', + 'zAsset-UUID = store.cloudphotodb-969', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-970', + 'zAsset.Cloud Collection GUID-971', + 'zAsset-Avalanche UUID-972', + 'zAssetAnalyState-zPK-973', + 'zAssetAnalyState-zEnt-974', + 'zAssetAnalyState-zOpt-975', + 'zAssetAnalyState-Asset= zAsset-zPK-976', + 'zAssetAnalyState-Asset UUID-977', + 'zAsstContrib-zPK-978', + 'zAsstContrib-zEnt-979', + 'zAsstContrib-zOpt-980', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-981', + 'zAsstContrib-Participant= zSharePartic-zPK-982', + 'zAssetDes-zPK-983', + 'zAssetDes-zENT-984', + 'zAssetDes-zOPT-985', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-986', + 'zEdIPTCAttr-Asset Attributes= zAddAssetAttr.zPK-987', + 'zEdIPTCAttr-Action Advised-988', + 'zEdIPTCAttr-Audio Duration-989', + 'zEdIPTCAttr-Audio Outcue-990', + 'zEdIPTCAttr-Audio Sampling Rate-991', + 'zEdIPTCAttr-Audio Sampling Res-992', + 'zEdIPTCAttr-Audion Type-993', + 'zEdIPTCAttr-ByLine-994', + 'zEdIPTCAttr-ByLine Title-995', + 'zEdIPTCAttr-Caption-996', + 'zEdIPTCAttr-Category-997', + 'zEdIPTCAttr-CIADR City-998', + 'zEdIPTCAttr-CIADR Ctry-999', + 'zEdIPTCAttr-CIADR ExtAdr-1000', + 'zEdIPTCAttr-CIADR PCode-1001', + 'zEdIPTCAttr-CIADR Region-1002', + 'zEdIPTCAttr-CiEmailWork-1003', + 'zEdIPTCAttr-CiTeLWork-1004', + 'zEdIPTCAttr-CiURLWork-1005', + 'zEdIPTCAttr-City-1006', + 'zEdIPTCAttr-Contact-1007', + 'zEdIPTCAttr-Content LocationCode-1008', + 'zEdIPTCAttr-Content LocationName-1009', + 'zEdIPTCAttr-Copy Right Notice-1010', + 'zEdIPTCAttr-Cntry Primary LocationCode-1011', + 'zEdIPTCAttr-Cntry Primary LocationName-1012', + 'zEdIPTCAttr-Creator ContactInfo-1013', + 'zEdIPTCAttr-Credit-1014', + 'zEdIPTCAttr-DateCreated-TEXT-1015', + 'zEdIPTCAttr-Dig Creation Date - TEXT-1016', + 'zEdIPTCAttr-Dig Creation Time - TEXT-1017', + 'zEdIPTCAttr-Dig SourceType-1018', + 'zEdIPTCAttr-EditStatus-1019', + 'zEdIPTCAttr-EditorAL Update-1020', + 'zEdIPTCAttr-Exp Date - TEXT-1021', + 'zEdIPTCAttr-Exp Time - TEXT-1022', + 'zEdIPTCAttr-Fixture ID-1023', + 'zEdIPTCAttr-Headline-1024', + 'zEdIPTCAttr-Image Orientation-1025', + 'zEdIPTCAttr-Image Type-1026', + 'zEdIPTCAttr-Keywords-1027', + 'zEdIPTCAttr-Language ID-1028', + 'zEdIPTCAttr-Obj Attr Reference-1029', + 'zEdIPTCAttr-Obj Cycle-1030', + 'zEdIPTCAttr-Obj Name-1031', + 'zEdIPTCAttr-Obj Type Ref-1032', + 'zEdIPTCAttr-Org Transmission Ref-1033', + 'zEdIPTCAttr-Orginating Program-1034', + 'zEdIPTCAttr-Program Version-1035', + 'zEdIPTCAttr-Province State-1036', + 'zEdIPTCAttr-RefDate - TEXT-1037', + 'zEdIPTCAttr-RefNumber-1038', + 'zEdIPTCAttr-RefService-1039', + 'zEdIPTCAttr-Release Date - TEXT-1040', + 'zEdIPTCAttr-Release Time - TEXT-1041', + 'zEdIPTCAttr-Scene-1042', + 'zEdIPTCAttr-Source-1043', + 'zEdIPTCAttr-Spec Instructions-1044', + 'zEdIPTCAttr-Star Rating-1045', + 'zEdIPTCAttr-SubLocation-1046', + 'zEdIPTCAttr-Subject Ref-1047', + 'zEdIPTCAttr-Supplemental Category-1048', + 'zEdIPTCAttr-Time Created - TEXT-1049', + 'zEdIPTCAttr-Urgency-1050', + 'zEdIPTCAttr-Usage Terms-1051', + 'zEdIPTCAttr-Writer Editor-1052', + 'zEdIPTCAttr-Data - BLOB-1053', + 'zCharRecogAttr-zPK-1054', + 'zCharRecogAttr-zENT-1055', + 'zCharRecogAttr-zOPT-1056', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1057', + 'zCldFeedEnt-zPK= zCldShared keys-1058', + 'zCldFeedEnt-zENT-1059', + 'zCldFeedEnt-zOPT-1060', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1061', + 'zCldFeedEnt-Entry Invitation Record GUID-1062', + 'zCldFeedEnt-Entry Cloud Asset GUID-1063', + 'zCldMast-zPK= zAsset-Master-1064', + 'zCldMast-zENT-1065', + 'zCldMast-zOPT-1066', + 'zCldMast-Moment Share Key= zShare-zPK-1067', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1068', + 'zCldMast-Originating Asset ID-1069', + 'zCldMast-Import Session ID- AirDrop-StillTesting-1070', + 'CMzCldMastMedData-zENT-1071', + 'CMzCldMastMedData-zOPT-1072', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-1073', + 'AAAzCldMastMedData-zENT-1074', + 'AAAzCldMastMedData-zOPT-1075', + 'AAAzCldMastMedData-CldMast key-1076', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1077', + 'zCldRes-zPK-1078', + 'zCldRes-zENT-1079', + 'zCldRes-zOPT-1080', + 'zCldRes-Asset= zAsset-zPK-1081', + 'zCldRes-Cloud Master= zCldMast-zPK-1082', + 'zCldRes-Asset UUID-1083', + 'zCldShareAlbumInvRec-zPK-1084', + 'zCldShareAlbumInvRec-zEnt-1085', + 'zCldShareAlbumInvRec-zOpt-1086', + 'zCldShareAlbumInvRec-Album Key-1087', + 'zCldShareAlbumInvRec-FOK Album Key-1088', + 'zCldShareAlbumInvRec-Album GUID-1089', + 'zCldShareAlbumInvRec-zUUID-1090', + 'zCldShareAlbumInvRec-Cloud GUID-1091', + 'zCldSharedComment-zPK-1092', + 'zCldSharedComment-zENT-1093', + 'zCldSharedComment-zOPT-1094', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1095', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1096', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1097', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1098', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1099', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1100', + 'zCldSharedComment-Cloud GUID-1101', + 'zCompAssetAttr-zPK-1102', + 'zCompAssetAttr-zEnt-1103', + 'zCompAssetAttr-zOpt-1104', + 'zCompAssetAttr-Asset Key-1105', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1106', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1107', + 'zCompSyncAttr-zAsset= zAsset-zPK-1108', + 'zCompSyncAttr-zENT-1109', + 'zCompSyncAttr-zOPT-1110', + 'zDetFace-zPK-1111', + 'zDetFace-zEnt-1112', + 'zDetFace.zOpt-1113', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1114', + 'zDetFace-PersonForFace= zPerson-zPK-1115', + 'zDetFace-Person Being Key Face-1116', + 'zDetFace-Face Print-1117', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1118', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1119', + 'zDetFace-UUID-1120', + 'zDetFaceGroup-zPK-1121', + 'zDetFaceGroup-zENT-1122', + 'zDetFaceGroup-zOPT-1123', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1124', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1125', + 'zDetFaceGroup-UUID-1126', + 'zDetFacePrint-zPK-1127', + 'zDetFacePrint-zEnt-1128', + 'zDetFacePrint-zOpt-1129', + 'zDetFacePrint-Face Key-1130', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1131', + 'zExtAttr-zENT-1132', + 'zExtAttr-zOPT-1133', + 'zExtAttr-Asset Key-1134', + 'zEdIPTCAttr-zPK-1135', + 'zEdIPTCAttr-zENT-1136', + 'zEdIPTCAttr-zOPT-1137', + 'zFaceCrop-zPK-1138', + 'zFaceCrop-zEnt-1139', + 'zFaceCrop-zOpt-1140', + 'zFaceCrop-Asset Key-1141', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1142', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1143', + 'zFaceCrop-Face Key-1144', + 'zFaceCrop-UUID-1145', + 'zGenAlbum-zPK=32AlbumLists= 32Albums-1146', + 'zGenAlbum-zENT-1147', + 'zGenAlbum-zOpt-1148', + 'zGenAlbum-Custom Key Asset-1149', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1150', + 'zGenAlbum-FOK Parent Folder-1151', + 'zGenAlbum-zSyndicate-1152', + 'zGenAlbum-UUID-1153', + 'SWYConverszGenAlbum-UUID-1154', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1155', + 'SWYConverszGenAlbum-Cloud GUID-1156', + 'zGenAlbum-Project Render UUID-1157', + 'SWYConverszGenAlbum-Project Render UUID-1158', + 'zIntResou-zPK-1159', + 'zIntResou-zENT-1160', + 'zIntResou-zOPT-1161', + 'zIntResou-Asset= zAsset_zPK-1162', + 'zIntResou-Fingerprint-4Queryend-1163', + 'zIntResou-Stable Hash-4Queryend-1164', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1165', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1166', + 'zMedAnlyAstAttr-zEnt-1167', + 'zMedAnlyAstAttr-zOpt-1168', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1169', + 'zMemory-zPK-1170', + 'zMemory-zENT-1171', + 'zMemory-zOPT-1172', + 'zMemory-Key Asset= zAsset-zPK-1173', + 'zMemory-UUID-1174', + 'zMoment-zPK-1175', + 'zMoment-zENT-1176', + 'zMoment-zOPT-1177', + 'zMoment-Highlight Key-1178', + 'zMoment-UUID-1179', + 'zPerson-zPK=zDetFace-Person-1180', + 'zPerson-zEnt-1181', + 'zPerson-zOpt-1182', + 'zPerson-Share Participant= zSharePartic-zPK-1183', + 'zPerson-KeyFace=zDetFace-zPK-1184', + 'zPerson-Assoc Face Group Key-1185', + 'zPerson-Person UUID-1186', + 'zPerson-Is_Me_Confidence-1187', + 'zPhotoAnalysisAssetAttr-zPK-1188', + 'zPhotoAnalysisAssetAttr-zEnt-1189', + 'zPhotoAnalysisAssetAttr-zOpt-1190', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1191', + 'zSceneP-zPK-1192', + 'zSceneP-zENT-1193', + 'zSceneP-zOPT-1194', + 'zShare-zPK-1195', + 'zShare-zENT-1196', + 'zShare-zOPT-1197', + 'zShare-UUID-1198', + 'SPLzShare-UUID-1199', + 'zShare-Scope ID = store.cloudphotodb-1200', + 'zSharePartic-zPK-1201', + 'zSharePartic-zENT-1202', + 'zSharePartic-zOPT-1203', + 'zSharePartic-Share Key= zShare-zPK-1204', + 'zSharePartic-Person= zPerson-zPK-1205', + 'zSharePartic-UUID-1206', + 'SBKAzSugg-zPK-1207', + 'SBKAzSugg-zENT-1208', + 'SBKAzSugg-zOPT-1209', + 'SBKAzSugg-UUID-1210', + 'SBRAzSugg-zPK-1211', + 'SBRAzSugg-zENT-1212', + 'SBRAzSugg-zOPT-1213', + 'SBRAzSugg-UUID-1214', + 'z3SuggBRA-3RepAssets-1215', + 'z3SuggBRA-71SuggBeingRepAssets-1216', + 'z3SuggBKA-71SuggBeingKeyAssets= zSugg-zPK-1217', + 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1218', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1219', + 'zUnmAdj-zOPT-1220', + 'zUnmAdj-zENT-1221', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1222', + 'zUnmAdj-UUID-1223', + 'zUnmAdj-Other Adjustments Fingerprint-1224', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1225', + 'zUserFeedback-zPK-1226', + 'zUserFeedback-zENT-1227', + 'zUserFeedback-zOPT-1228', + 'zUserFeedback-Person= zPerson-zPK-1229', + 'zUserFeedback-Memory= zMemory-zPK-1230', + 'zUserFeedback-UUID-1231', + 'zVisualSearchAttr-zPK-1232', + 'zVisualSearchAttr-zENT-1233', + 'zVisualSearchAttr-zOPT-1234', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1235', + 'z32AlbumList-32Albums= zGenAlbum-zPK-1236', + 'z32AlbumList-Album List Key-1237', + 'z32AlbumList-FOK32Albums Key-1238', + 'z33Assets-33Albums= zGenAlbum-zPK-1239', + 'z33Assets-3Asset Key= zAsset-zPK in the Album-1240', + 'z33Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1241', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1242', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1243', + 'z3MemoryBCAs-56memoriesBeingCuratedAssets= zMemory-zPK-1244', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1245', + 'z3MemoryBECAs-56MemoriesBeingExtCuratedAssets= zMemory-zPK-1246', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1247', + 'z3MemoryBRAs-56RepresentativeAssets= zMemory-zPK-1248', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1249', + 'z3MemoryBUCAs-56MemoriesBeingUserCuratedAssets= zMemory-zPK-1250', + 'z3MemoryBCAs-56Memories Being Custom User Assets-1251', + 'z3MemoryBCAs-3Custom User Assets-1252', + 'z3MemoryBCAs-FOK-3Custom User Assets-1253') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path \ No newline at end of file diff --git a/scripts/artifacts/Ph70UserAdjustDateTimezoneLocation.py b/scripts/artifacts/Ph70UserAdjustDateTimezoneLocation.py deleted file mode 100644 index f0b3e1042..000000000 --- a/scripts/artifacts/Ph70UserAdjustDateTimezoneLocation.py +++ /dev/null @@ -1,6082 +0,0 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses iOS 15-18 asset records from PhotoData-Photos.sqlite for assets that might have -# a user adjusted Date & TimeZone & Location. This parser should provide data for investigative analysis -# of assets where a user might have adjusted the Date AND the Timezone AND the Location of an asset from -# within the Apple Photos Application (com.apple.mobileslideshow) I recommend opening the TSV generated -# report with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md -# TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# - -import os -import plistlib -import nska_deserialize as nd -from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly, iOS - - -def get_ph70adjusteddatetimezonelocphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Date & Timezone & Location for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) & (zAddAssetAttr.ZTIMEZONEOFFSET <> - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date & TimeZone & Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)' \ - ' & (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)' \ - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)' - report = ArtifactHtmlReport('Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date & Timezone & Location data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) & (zAddAssetAttr.ZTIMEZONEOFFSET <> - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date & TimeZone & Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)' \ - ' & (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)' \ - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph70.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date & Timezone & Location data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -def get_ph71adjusteddatetimezonephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Date & Timezone for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) & (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date & TimeZone' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)' \ - ' & (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)', - report = ArtifactHtmlReport('Ph71.1-Possible_Adjust_Date-Timezone-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph71.1-Possible_Adjust_Date-Timezone-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph71.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph71.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date & Timezone data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) & (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date & TimeZone' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)' \ - ' & (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)', - report = ArtifactHtmlReport('Ph71.1-Possible_Adjust_Date-Timezone-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph71.1-Possible_Adjust_Date-Timezone-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph71.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph71.1-Possible_Adjust_Date-Timezone-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date & Timezone data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -def get_ph72adjusteddatelocphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Date & Location for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Paorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date & Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)' \ - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph72.1-Possible_Adjust_Date-Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph72.1-Possible_Adjust_Date-Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph72.1-Possible_Adjust_Date-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph72.1-Possible_Adjust_Date-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date & Location data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date & Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)' \ - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph72.1-Possible_Adjust_Date-Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph72.1-Possible_Adjust_Date-Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph72.1-Possible_Adjust_Date-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph72.1-Possible_Adjust_Date-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date & Location data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -def get_ph73adjusteddatephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Date for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)', - report = ArtifactHtmlReport('Ph73.1-Possible_Adjust_Date-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph73.1-Possible_Adjust_Date-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph73.1-Possible_Adjust_Date-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph73.1-Possible_Adjust_Date-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> (REPLACE(strftime('%Y-%m-%d %H:%M:%S', datetime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME')), '-', ':'))) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Date' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)', - report = ArtifactHtmlReport('Ph73.1-Possible_Adjust_Date-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph73.1-Possible_Adjust_Date-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph73.1-Possible_Adjust_Date-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph73.1-Possible_Adjust_Date-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Date data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -def get_ph74adjustedtimezonelocphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Timezone & Location for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted TimeZone & Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)' \ - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Timezone & Location data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted TimeZone & Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)' \ - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph74.1-Possible_Adjust_Timezone-Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Timezone & Location data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -def get_ph75adjustedtimezonephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Timezone for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted TimeZone' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)', - report = ArtifactHtmlReport('Ph75.1-Possible_Adjust_Timezone-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph75.1-Possible_Adjust_Timezone-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph75.1-Possible_Adjust_Timezone-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph75.1-Possible_Adjust_Timezone-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Timezone data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted TimeZone' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)', - report = ArtifactHtmlReport('Ph75.1-Possible_Adjust_Timezone-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph75.1-Possible_Adjust_Timezone-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph75.1-Possible_Adjust_Timezone-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph75.1-Possible_Adjust_Timezone-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Timezone data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -def get_ph76adjustedlocphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = iOS.get_version() - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite User Adjusted Location for iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Paorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph76.1-Possible_Adjust_Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph76.1-Possible_Adjust_Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Saved Asset Type-54', - 'zAsset-Kind-55', - 'zAsset-Kind-Sub-Type-56', - 'zAddAssetAttr-Cloud Kind Sub Type-57', - 'zAsset-Playback Style-58', - 'zAsset-Playback Variation-59', - 'zAsset-Has Adjustments-Camera-Effects-Filters-60', - 'zAsset-Adjustment Timestamp-61', - 'zAddAssetAttr-Editor Bundle ID-62', - 'zMedAnlyAstAttr-Media Analysis Timestamp-63', - 'zAsset-Analysis State Modification Date-64', - 'zAddAssetAttr-Scene Analysis Timestamp-65', - 'zAsset-zPK-66', - 'zAddAssetAttr-zPK-67', - 'zAsset-UUID = store.cloudphotodb-68', - 'zAddAssetAttr-Master Fingerprint-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph76.1-Possible_Adjust_Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph76.1-Possible_Adjust_Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Location data detected in iOS15-17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-UTC', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH', 'LOCALTIME') AS 'zAsset-Date Created-Local', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data-Indicator', - zAddAssetAttr.ZSHIFTEDLOCATIONDATA AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data-Indicator', - zAddAssetAttr.ZREVERSELOCATIONDATA AS 'zAddAssetAttr-Reverse Location Data', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data-HasDataIndicator', - AAAzCldMastMedData.ZDATA AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data-HasDataIndicator', - CMzCldMastMedData.ZDATA AS 'CMzCldMastMedData-Data', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - # AAAzCldMastMedData.ZDATA-PLIST - aaazcldmastmeddata_plist_tiff = '' - aaazcldmastmeddata_plist_exif = '' - aaazcldmastmeddata_plist_gps = '' - aaazcldmastmeddata_plist_iptc = '' - # CMzCldMastMedData.ZDATA-PLIST - cmzcldmastmeddata_plist_tiff = '' - cmzcldmastmeddata_plist_exif = '' - cmzcldmastmeddata_plist_gps = '' - cmzcldmastmeddata_plist_iptc = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[33] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[33]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[36] is not None: - pathto = os.path.join(report_folder, 'AAA_ReversedLocationData_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[36]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[21]) - else: - logfunc('Error reading exported plist from zAsset-Filename' + row[21]) - - # AAAzCldMastMedData.ZDATA-PLIST - if row[40] is not None: - pathto = os.path.join(report_folder, 'AAAzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[40]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - aaazcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - aaazcldmastmeddata_plist_exif = val - elif key == '{GPS}': - aaazcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - aaazcldmastmeddata_plist_iptc = val - - # CMzCldMastMedData.ZDATA-PLIST - if row[46] is not None: - pathto = os.path.join(report_folder, 'CMzCldMastMedData-Data_' + row[21] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[46]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - - for key, val in plist.items(): - if key == '{TIFF}': - cmzcldmastmeddata_plist_tiff = val - elif key == '{Exif}': - cmzcldmastmeddata_plist_exif = val - elif key == '{GPS}': - cmzcldmastmeddata_plist_gps = val - elif key == '{IPTC}': - cmzcldmastmeddata_plist_iptc = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], - aaashiftedlocation_postal_address, - row[34], row[35], - aaareverselocation_postal_address, - row[37], row[38], row[39], - aaazcldmastmeddata_plist_tiff, - aaazcldmastmeddata_plist_exif, - aaazcldmastmeddata_plist_gps, - aaazcldmastmeddata_plist_iptc, - row[41], row[42], row[43], row[44], row[45], - cmzcldmastmeddata_plist_tiff, - cmzcldmastmeddata_plist_exif, - cmzcldmastmeddata_plist_gps, - cmzcldmastmeddata_plist_iptc, - row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. ' \ - ' This parser should provide data for investigative' \ - ' analysis of assets that might have User Adjusted Location' \ - ' data via Photos Application (com.apple.mobileslideshow).' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' \ - ' WHERE (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - report = ArtifactHtmlReport('Ph76.1-Possible_Adjust_Location-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph76.1-Possible_Adjust_Location-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-UTC-0', - 'zAsset-Date Created-Local-1', - 'zCldMast-Creation Date-2', - 'zAsset-Added Date-3', - 'zAsset- SortToken -CameraRoll-4', - 'zAddAssetAttr-Time Zone Name-5', - 'zAddAssetAttr-Time Zone Offset-6', - 'zAddAssetAttr-Inferred Time Zone Offset-7', - 'zAddAssetAttr-EXIF-String-8', - 'zAddAssetAttr-Date Created Source-9', - 'zAsset-Modification Date-10', - 'zAsset-Last Shared Date-11', - 'zCldMast-Cloud Local State-12', - 'zCldMast-Import Date-13', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-14', - 'zAddAssetAttr-Import Session ID-15', - 'zAddAssetAttr-Alt Import Image Date-16', - 'zCldMast-Import Session ID- AirDrop-StillTesting-17', - 'zAsset-Cloud Batch Publish Date-18', - 'zAsset-Cloud Server Publish Date-19', - 'zAsset-Directory-Path-20', - 'zAsset-Filename-21', - 'zAddAssetAttr- Original Filename-22', - 'zCldMast- Original Filename-23', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-24', - 'zAsset-Latitude-25', - 'zExtAttr-Latitude-26', - 'zAsset-Longitude-27', - 'zExtAttr-Longitude-28', - 'zAddAssetAttr-GPS Horizontal Accuracy-29', - 'zAddAssetAttr-Location Hash-30', - 'zAddAssetAttr-Shifted Location Valid-31', - 'zAddAssetAttr-Shifted Location Data-Indicator-32', - 'zAddAssetAttr-Shifted Location Data-33', - 'zAddAssetAttr-Reverse Location Is Valid-34', - 'zAddAssetAttr-Reverse Location Data-Indicator-35', - 'zAddAssetAttr-Reverse Location Data-36', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-37', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-38', - 'AAAzCldMastMedData-Data-HasDataIndicator-39', - 'aaazcldmastmeddata_plist_tiff-40', - 'aaazcldmastmeddata_plist_exif-40', - 'aaazcldmastmeddata_plist_gps-40', - 'aaazcldmastmeddata_plist_iptc-40', - 'CldMasterzCldMastMedData-zOPT-41', - 'zCldMast-Media Metadata Type-42', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-43', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-44', - 'CMzCldMastMedData-Data-HasDataIndicator-45', - 'cmzcldmastmeddata_plist_tiff-46', - 'cmzcldmastmeddata_plist_exif-46', - 'cmzcldmastmeddata_plist_gps-46', - 'cmzcldmastmeddata_plist_iptc-46', - 'zExtAttr-Camera Make-47', - 'zExtAttr-Camera Model-48', - 'zExtAttr-Lens Model-49', - 'zAddAssetAttr.Imported by Bundle Identifier-50', - 'zAddAssetAttr-Imported By Display Name-51', - 'zCldMast-Imported by Bundle ID-52', - 'zCldMast-Imported by Display Name-53', - 'zAsset-Is_Recently_Saved-iOS18-54', - 'zAsset-Saved Asset Type-55', - 'zAsset-Kind-56', - 'zAsset-Kind-Sub-Type-57', - 'zExtAttr-Generative_AI_Type-iOS18-58', - 'zExtAttr-Credit-iOS18-59', - 'zAddAssetAttr-Cloud Kind Sub Type-60', - 'zAsset-Playback Style-61', - 'zAsset-Playback Variation-62', - 'zAddAssetAttr-View_Presentation-iOS18-63', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-64', - 'zAsset-Adjustment Timestamp-65', - 'zAddAssetAttr-Editor Bundle ID-66', - 'zMedAnlyAstAttr-Media Analysis Timestamp-67', - 'zAsset-Analysis State Modification Date-68', - 'zAddAssetAttr-Scene Analysis Timestamp-69', - 'zAsset-zPK-70', - 'zAddAssetAttr-zPK-71', - 'zAsset-UUID = store.cloudphotodb-72', - 'zAddAssetAttr-Original Stable Hash-iOS18-73') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph76.1-Possible_Adjust_Location-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph76.1-Possible_Adjust_Location-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No User Adjusted Location data detected in iOS18 PhotoData-Photos.sqlite') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph70-1-Possible_Adjust_Date-Timezone-Location-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph70.1 Possible Date Timezone Location Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted Date & TimeZone & Location' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime) &' - ' (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET) &' - ' (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph70adjusteddatetimezonelocphdapsql' - }, - 'Ph71-1-Possible_Adjust_Date-Timezone-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph71.1 Possible Date Timezone Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted Date & TimeZone' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime) &' - ' (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph71adjusteddatetimezonephdapsql' - }, - 'Ph72-1-Possible_Adjust_Date-Location-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph72.1 Possible Date Location Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted Date & Location' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime) &' - ' (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph72adjusteddatelocphdapsql' - }, - 'Ph73-1-Possible_Adjust_Date-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph73.1 Possible Date Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted Date' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAddAssetAttr.ZEXIFTIMESTAMPSTRING <> zAsset.ZDATECREATED LocalTime)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph73adjusteddatephdapsql' - }, - 'Ph74-1-Possible_Adjust_Timezone-Location-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph74.1 Possible Timezone Location Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted TimeZone & Location' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)' - ' & (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph74adjustedtimezonelocphdapsql' - }, - 'Ph75-1-Possible_Adjust_Timezone-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph75.1 Possible Timezone Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted TimeZone' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAddAssetAttr.ZTIMEZONEOFFSET <> zAddAssetAttr.ZINFERREDTIMEZONEOFFSET)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph75adjustedtimezonephdapsql' - }, - 'Ph76-1-Possible_Adjust_Location-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph76.1 Possible Location Adjust', - 'description': 'Parses asset records from PhotoData-Photos.sqlite.' - ' This parser should provide data for investigative' - ' analysis of assets that might have User Adjusted Location' - ' data via Photos Application (com.apple.mobileslideshow).' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results. WHERE (zAsset.ZLATITUDE <> zExtAttr.ZLATITUDE)', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-H-Possible_User_Adjusted_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph76adjustedlocphdapsql' - } -} diff --git a/scripts/modules_to_exclude.py b/scripts/modules_to_exclude.py index 127f8812e..edfc61959 100644 --- a/scripts/modules_to_exclude.py +++ b/scripts/modules_to_exclude.py @@ -2,28 +2,37 @@ # These modules are deselected by default in the GUI. modules_to_exclude = [ + 'photosDbexif', 'photosMetadata', 'walStrings', - 'Ph9BurstAvalanche', + 'Ph008HasAdjustment', + 'Ph009BurstAvalanche', 'Ph10AssetParsedEmbeddedFiles', - 'Ph15PeopleandDetFacesNAD', - 'Ph16AssetPeopleandDetFaces', - 'Ph21AlbumsNonSharedNAD', - 'Ph22AssetsInNonSharedAlbums', - 'Ph23AlbumsSharedNAD', - 'Ph24AssetsInSharedAlbums', - 'Ph26SyndicationPLAssets', - 'Ph31iCloudSharePhotoLibraryNAD', - 'Ph32AssetsIniCldSPLwContrib', - 'Ph33AssetsIniCldSPLfromOtherContrib', - 'Ph34iCloudSharedLinksNAD', - 'Ph35iCloudSharedLinkAssets', - 'Ph50AssetIntResouData', - 'Ph51PossOptimizedAssetsIntResouData', + 'Ph010AssetParsedEmbeddedFiles', + 'Ph011KwrdsCapsTitlesDescripsBasicAssetData', + 'Ph015PeopleandDetFacesNAD', + 'Ph016AssetPeopleandDetFaces', + 'Ph017GenAIDetected', + 'Ph020AlbumsNAD', + 'Ph021AlbumsNonSharedNAD', + 'Ph022AssetsInNonSharedAlbums', + 'Ph023AlbumsSharedNAD', + 'Ph025SWYConvAlbumsNAD', + 'Ph024AssetsInSharedAlbums', + 'Ph026SyndicationPLAssets', + 'Ph030iCloudShareMethodsNAD', + 'Ph031iCloudSharePhotoLibraryNAD', + 'Ph032AssetsIniCldSPLwContrib', + 'Ph033AssetsIniCldSPLfromOtherContrib', + 'Ph034iCloudSharedLinksNAD', + 'Ph035iCloudSharedLinkAssets', + 'Ph050AssetIntResouData', + 'Ph051PossOptimizedAssetsIntResouData', 'Ph70UserAdjustDateTimezoneLocation', - 'Ph94Ios14REFforAssetAnalysis', - 'Ph95iOS15REFforAssetAnalysis', - 'Ph96iOS16REFforAssetAnalysis', - 'Ph97iOS17REFforAssetAnalysis', - 'Ph98iOS18REFforAssetAnalysis' + 'Ph094Ios14REFforAssetAnalysis', + 'Ph095iOS15REFforAssetAnalysis', + 'Ph096iOS16REFforAssetAnalysis', + 'Ph097iOS17REFforAssetAnalysis', + 'Ph098iOS18REFforAssetAnalysis', + 'Ph126iOS26REFforAssetAnalysis', ] \ No newline at end of file From c5a3e48f8a4f5614cac4ed541c193ffcc96012cb Mon Sep 17 00:00:00 2001 From: Scott_Kjr3347 <34526954+ScottKjr3347@users.noreply.github.com> Date: Thu, 28 May 2026 15:44:43 -0700 Subject: [PATCH 2/2] Update Ph002BasicAssetandAlbumData.py Update basic asset and album data parser for ios 18 and 26 --- .../artifacts/Ph002BasicAssetandAlbumData.py | 385 +++++++++++++++++- 1 file changed, 374 insertions(+), 11 deletions(-) diff --git a/scripts/artifacts/Ph002BasicAssetandAlbumData.py b/scripts/artifacts/Ph002BasicAssetandAlbumData.py index 6b4dd2aeb..b4cd9bac6 100644 --- a/scripts/artifacts/Ph002BasicAssetandAlbumData.py +++ b/scripts/artifacts/Ph002BasicAssetandAlbumData.py @@ -6392,7 +6392,7 @@ def Ph002_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wra if (version.parse(iosversion) <= version.parse("10.3.4")) or (version.parse(iosversion) >= version.parse("27")): logfunc("Unsupported version for GenPlay-Photos.sqlite iOS " + iosversion) return (), [], source_path - if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("27")): + if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("26")): source_path = get_file_path(files_found,"Photos.sqlite") if source_path is None or not os.path.exists(source_path): logfunc(f"Photos.sqlite not found for iOS version {iosversion}") @@ -6638,7 +6638,369 @@ def Ph002_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wra zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON + AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON + CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Is_Recently_Saved-21', + 'zAsset-Saved Asset Type-22', + 'zAddAssetAttr-Imported by Bundle ID-23', + 'zAddAssetAttr-Imported By Display Name-24', + 'zAddAssetAttr-Imported by-25', + 'zCldMast-Imported by Bundle ID-26', + 'zCldMast-Imported by Display Name-27', + 'zCldMast-Imported By-28', + 'zAsset-Visibility State-29', + 'zExtAttr-Camera Make-30', + 'zExtAttr-Camera Model-31', + 'zExtAttr-Lens Model-32', + 'zAsset-Derived Camera Capture Device-33', + 'zAddAssetAttr-Camera Captured Device-34', + 'zAsset-Capture_Session_Identifier-35', + 'zAddAssetAttr-Share Type-36', + 'zCldMast-Cloud Local State-37', + ('zCldMast-Import Date-38', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'), + 'zAddAssetAttr-Import Session ID-40', + ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-42', + ('zAsset-Cloud Batch Publish Date-43', 'datetime'), + ('zAsset-Cloud Server Publish Date-44', 'datetime'), + 'zAsset-Cloud Download Requests-45', + 'zAsset-Cloud Batch ID-46', + 'zAsset-Latitude-47', + 'zExtAttr-Latitude-48', + 'zAsset-Longitude-49', + 'zExtAttr-Longitude-50', + 'zAddAssetAttr-GPS Horizontal Accuracy-51', + 'zAddAssetAttr-Location Hash-52', + 'zAddAssetAttr-Shifted Location Valid-53', + 'zAddAssetAttr-Shifted Location Data-54', + 'zAddAssetAttr-Reverse Location Is Valid-55', + 'zAddAssetAttr-Reverse Location Data-56', + 'AAAzCldMastMedData-zOPT-57', + 'zAddAssetAttr-Media Metadata Type-58', + 'AAAzCldMastMedData-Data-59', + 'CldMasterzCldMastMedData-zOPT-60', + 'zCldMast-Media Metadata Type-61', + 'CMzCldMastMedData-Data-62', + 'zAsset-Bundle Scope-63', + ('zGenAlbum-Creation Date-64', 'datetime'), + ('zGenAlbum-Start Date-65', 'datetime'), + ('zGenAlbum-End Date-66', 'datetime'), + 'zGenAlbum-Album Kind-67', + 'zGenAlbum-Title-User&System Applied-68', + 'zGenAlbum- Import Session ID-69', + 'zGenAlbum-Imported by Bundle Identifier-70', + 'zGenAlbum-Cached Photos Count-71', + 'zGenAlbum-Cached Videos Count-72', + 'zGenAlbum-Cached Count-73', + 'zGenAlbum-Trashed State-74', + ('zGenAlbum-Trash Date-75', 'datetime'), + 'zGenAlbum-UUID-76', + 'zGenAlbum-Cloud GUID-77', + 'zAsset-Active Library Scope Participation State-78', + 'zAsset-zPK-79', + 'zAddAssetAttr-zPK-80', + 'zAsset-UUID = store.cloudphotodb-81', + 'zAddAssetAttr-Original Stable Hash-82', + 'zAddAssetAttr.Adjusted Stable Hash-83') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("26")) & (version.parse(iosversion) < version.parse("27")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -6656,15 +7018,15 @@ def Ph002_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wra db_records = get_sqlite_db_records(source_path, query) for row in db_records: data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83])) + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83])) data_headers = (('zAsset-Date Created-0', 'datetime'), ('zAsset- SortToken -CameraRoll-1', 'datetime'), @@ -6753,3 +7115,4 @@ def Ph002_3AssetBasicGenAlbumGenPlayPsql(files_found, report_folder, seeker, wra data_list = get_sqlite_db_records(source_path, query) return data_headers, data_list, source_path + \ No newline at end of file