安全分析报告: Mad Aces v1.2.2.3

安全分数


安全分数 27/100

风险评级


等级

  1. A
  2. B
  3. C
  4. F

严重性分布 (%)


隐私风险

8

用户/设备跟踪器


调研结果

高危 17
中危 13
信息 1
安全 2
关注 1

高危 Activity (com.unity3d.player.UnityPlayerProxyActivity) 的启动模式不是standard模式

Activity 不应将启动模式属性设置为 "singleTask/singleInstance",因为这会使其成为根 Activity,并可能导致其他应用程序读取调用 Intent 的内容。因此,当 Intent 包含敏感信息时,需要使用 "standard" 启动模式属性。

高危 Activity (com.unity3d.player.UnityPlayerProxyActivity) 容易受到 Android Task Hijacking/StrandHogg 的攻击。

活动不应将启动模式属性设置为“singleTask”。 然后,其他应用程序可以将恶意活动放置在活动栈顶部,从而导致任务劫持/StrandHogg 1.0 漏洞。 这使应用程序成为网络钓鱼攻击的易受攻击目标。 可以通过将启动模式属性设置为“singleInstance”或设置空 taskAffinity (taskAffinity="") 属性来修复此漏洞。 您还可以将应用的目标 SDK 版本 (23) 更新到 28 或更高版本以在平台级别修复此问题。

高危 Activity (com.unity3d.player.UnityPlayerActivity) 的启动模式不是standard模式

Activity 不应将启动模式属性设置为 "singleTask/singleInstance",因为这会使其成为根 Activity,并可能导致其他应用程序读取调用 Intent 的内容。因此,当 Intent 包含敏感信息时,需要使用 "standard" 启动模式属性。

高危 Activity (com.unity3d.player.UnityPlayerActivity) 容易受到 Android Task Hijacking/StrandHogg 的攻击。

活动不应将启动模式属性设置为“singleTask”。 然后,其他应用程序可以将恶意活动放置在活动栈顶部,从而导致任务劫持/StrandHogg 1.0 漏洞。 这使应用程序成为网络钓鱼攻击的易受攻击目标。 可以通过将启动模式属性设置为“singleInstance”或设置空 taskAffinity (taskAffinity="") 属性来修复此漏洞。 您还可以将应用的目标 SDK 版本 (23) 更新到 28 或更高版本以在平台级别修复此问题。

高危 Activity (com.unity3d.player.UnityPlayerNativeActivity) 的启动模式不是standard模式

Activity 不应将启动模式属性设置为 "singleTask/singleInstance",因为这会使其成为根 Activity,并可能导致其他应用程序读取调用 Intent 的内容。因此,当 Intent 包含敏感信息时,需要使用 "standard" 启动模式属性。

高危 Activity (com.unity3d.player.UnityPlayerNativeActivity) 容易受到 Android Task Hijacking/StrandHogg 的攻击。

活动不应将启动模式属性设置为“singleTask”。 然后,其他应用程序可以将恶意活动放置在活动栈顶部,从而导致任务劫持/StrandHogg 1.0 漏洞。 这使应用程序成为网络钓鱼攻击的易受攻击目标。 可以通过将启动模式属性设置为“singleInstance”或设置空 taskAffinity (taskAffinity="") 属性来修复此漏洞。 您还可以将应用的目标 SDK 版本 (23) 更新到 28 或更高版本以在平台级别修复此问题。

高危 Activity (com.vungle.publisher.FullScreenAdActivity) 的启动模式不是standard模式

Activity 不应将启动模式属性设置为 "singleTask/singleInstance",因为这会使其成为根 Activity,并可能导致其他应用程序读取调用 Intent 的内容。因此,当 Intent 包含敏感信息时,需要使用 "standard" 启动模式属性。

高危 Activity (com.vungle.publisher.FullScreenAdActivity) 容易受到 Android Task Hijacking/StrandHogg 的攻击。

活动不应将启动模式属性设置为“singleTask”。 然后,其他应用程序可以将恶意活动放置在活动栈顶部,从而导致任务劫持/StrandHogg 1.0 漏洞。 这使应用程序成为网络钓鱼攻击的易受攻击目标。 可以通过将启动模式属性设置为“singleInstance”或设置空 taskAffinity (taskAffinity="") 属性来修复此漏洞。 您还可以将应用的目标 SDK 版本 (23) 更新到 28 或更高版本以在平台级别修复此问题。

高危 Activity (y.z.a.Main) 的启动模式不是standard模式

Activity 不应将启动模式属性设置为 "singleTask/singleInstance",因为这会使其成为根 Activity,并可能导致其他应用程序读取调用 Intent 的内容。因此,当 Intent 包含敏感信息时,需要使用 "standard" 启动模式属性。

高危 Activity (y.z.a.Main) 容易受到 Android Task Hijacking/StrandHogg 的攻击。

活动不应将启动模式属性设置为“singleTask”。 然后,其他应用程序可以将恶意活动放置在活动栈顶部,从而导致任务劫持/StrandHogg 1.0 漏洞。 这使应用程序成为网络钓鱼攻击的易受攻击目标。 可以通过将启动模式属性设置为“singleInstance”或设置空 taskAffinity (taskAffinity="") 属性来修复此漏洞。 您还可以将应用的目标 SDK 版本 (23) 更新到 28 或更高版本以在平台级别修复此问题。

高危 如果一个应用程序使用WebView.loadDataWithBaseURL方法来加载一个网页到WebView,那么这个应用程序可能会遭受跨站脚本攻击

如果一个应用程序使用WebView.loadDataWithBaseURL方法来加载一个网页到WebView,那么这个应用程序可能会遭受跨站脚本攻击
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05h-Testing-Platform-Interaction.md#static-analysis-7

Files:
com/chartboost/sdk/impl/at.java, line(s) 49,5,6
com/chartboost/sdk/impl/br.java, line(s) 33,6,7
com/heyzap/common/mraid/MRAIDView.java, line(s) 197,443,32,33
com/heyzap/house/view/InterstitialWebView.java, line(s) 67,74,14,15

高危 已启用远程WebView调试

已启用远程WebView调试
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04c-Tampering-and-Reverse-Engineering.md#debugging-and-tracing

Files:
com/heyzap/common/mraid/MRAIDView.java, line(s) 306,32,33

高危 WebView域控制不严格漏洞

WebView域控制不严格漏洞


Files:
com/prime31/WebViewActivity.java, line(s) 78,72,73,74,76,78,79,80,81,82,83,84,85,92,93,95,96,97,121

高危 启用了调试配置。生产版本不能是可调试的

启用了调试配置。生产版本不能是可调试的
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04c-Tampering-and-Reverse-Engineering.md#debugging-and-tracing

Files:
com/prime31/InAppBilling/BuildConfig.java, line(s) 3,4

高危 SSL的不安全实现。信任所有证书或接受自签名证书是一个关键的安全漏洞。此应用程序易受MITM攻击

SSL的不安全实现。信任所有证书或接受自签名证书是一个关键的安全漏洞。此应用程序易受MITM攻击
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05g-Testing-Network-Communication.md#android-network-apis

Files:
com/heyzap/http/MySSLSocketFactory.java, line(s) 72,13,14,15

高危 应用程序包含隐私跟踪程序

此应用程序有多个8隐私跟踪程序。跟踪器可以跟踪设备或用户,是终端用户的隐私问题。

中危 应用程序数据存在被泄露的风险

未设置[android:allowBackup]标志
这个标志 [android:allowBackup]应该设置为false。默认情况下它被设置为true,允许任何人通过adb备份你的应用程序数据。它允许已经启用了USB调试的用户从设备上复制应用程序数据。

中危 Broadcast Receiver (com.heyzap.sdk.ads.PackageAddedReceiver) 未被保护。

存在一个intent-filter。
发现 Broadcast Receiver与设备上的其他应用程序共享,因此让它可以被设备上的任何其他应用程序访问。intent-filter的存在表明这个Broadcast Receiver是显式导出的。

中危 Broadcast Receiver (y.z.a.Receiver) 未被保护。

存在一个intent-filter。
发现 Broadcast Receiver与设备上的其他应用程序共享,因此让它可以被设备上的任何其他应用程序访问。intent-filter的存在表明这个Broadcast Receiver是显式导出的。

中危 应用程序可以读取/写入外部存储器,任何应用程序都可以读取写入外部存储器的数据

应用程序可以读取/写入外部存储器,任何应用程序都可以读取写入外部存储器的数据
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#external-storage

Files:
com/chartboost/sdk/Libraries/CBUtility.java, line(s) 238,239
com/chartboost/sdk/Libraries/h.java, line(s) 37,208
com/heyzap/common/mraid/nativefeature/MRAIDNativeFeatureProvider.java, line(s) 180,181
com/heyzap/internal/ProxyActivity.java, line(s) 174
com/heyzap/internal/Utils.java, line(s) 305,519
com/jirbo/adcolony/ADCImage.java, line(s) 229
com/jirbo/adcolony/ADCStorage.java, line(s) 80,81
com/jirbo/adcolony/m.java, line(s) 127,132,133
com/prime31/EtceteraPlugin.java, line(s) 862,863,897,898
com/prime31/EtceteraProxyActivity.java, line(s) 86,87
com/unity3d/ads/android/UnityAdsUtils.java, line(s) 161
com/vungle/publisher/env/AndroidDevice.java, line(s) 195
com/vungle/publisher/inject/ConfigurablePublisherModule.java, line(s) 109

中危 MD5是已知存在哈希冲突的弱哈希

MD5是已知存在哈希冲突的弱哈希
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md#identifying-insecure-andor-deprecated-cryptographic-algorithms-mstg-crypto-4

Files:
com/heyzap/house/model/AdModel.java, line(s) 483
com/heyzap/internal/Utils.java, line(s) 461
com/immersion/hapticmediasdk/utils/FileManager.java, line(s) 150
com/unity3d/ads/android/UnityAdsUtils.java, line(s) 90

中危 文件可能包含硬编码的敏感信息,如用户名、密码、密钥等

文件可能包含硬编码的敏感信息,如用户名、密码、密钥等
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#checking-memory-for-sensitive-data-mstg-storage-10

Files:
com/heyzap/common/mraid/nativefeature/MRAIDNativeFeatureProvider.java, line(s) 32
com/heyzap/exchange/ExchangeRequestParams.java, line(s) 22
com/heyzap/house/Manager.java, line(s) 32
com/heyzap/house/abstr/AbstractActivity.java, line(s) 21,22,23
com/heyzap/internal/Constants.java, line(s) 13
com/heyzap/internal/PackageManager.java, line(s) 20
com/heyzap/mediation/config/MediationConfigLoader.java, line(s) 39,40
com/heyzap/mediation/display/MediatedDisplayConfigLoader.java, line(s) 25
com/heyzap/sdk/mediation/adapter/AdcolonyAdapter.java, line(s) 56,55,54
com/heyzap/sdk/mediation/adapter/HyprmxAdapter.java, line(s) 46,47
com/heyzap/sdk/mediation/adapter/LeadboltAdapter.java, line(s) 31
com/heyzap/sdk/mediation/adapter/VungleAdapter.java, line(s) 37
com/immersion/hapticmediasdk/controllers/HapticPlaybackThread.java, line(s) 28
com/prime31/AlarmManagerReceiver.java, line(s) 23,24,25,26,27,28,29,30,31,32,33,34,36,37,38
com/prime31/EtceteraPlugin.java, line(s) 81,83,82
com/unity3d/ads/android/UnityAds.java, line(s) 37,34,35,38,32
com/unity3d/ads/android/properties/UnityAdsConstants.java, line(s) 85,45,96,17,123,124,18,15,46,97,47,19,48,39,72,49,21,50,98,69,112,16,22,73,113,51,67,125,126,52,99,53,23,8,25,54,100,26,44,55,27,128,83,129,94,29,74,77,40,130,78,131,132,133,30,79,56,101,10,57,102,58,103,31,32,41,42,11,134,114,59,104,60,105,107,61,106,62,9,63,108,33,34,64,81,65,109,12,35,36,37,7,66,110,43,135,119,13,95,111,122
com/unity3d/ads/android/webapp/UnityAdsWebView.java, line(s) 123
com/vungle/publisher/FullScreenAdActivity.java, line(s) 33,34

中危 SHA-1是已知存在哈希冲突的弱哈希

SHA-1是已知存在哈希冲突的弱哈希
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md#identifying-insecure-andor-deprecated-cryptographic-algorithms-mstg-crypto-4

Files:
com/chartboost/sdk/Libraries/b.java, line(s) 14
com/heyzap/common/net/APIClient.java, line(s) 133
com/heyzap/internal/Utils.java, line(s) 338
com/jirbo/adcolony/ai.java, line(s) 31

中危 应用程序创建临时文件。敏感信息永远不应该被写进临时文件

应用程序创建临时文件。敏感信息永远不应该被写进临时文件


Files:
com/heyzap/http/FileAsyncHttpResponseHandler.java, line(s) 46
com/prime31/EtceteraProxyActivity.java, line(s) 77

中危 IP地址泄露

IP地址泄露


Files:
com/immersion/hapticmediasdk/HapticMediaSDKVersion.java, line(s) 4

中危 不安全的Web视图实现。可能存在WebView任意代码执行漏洞

不安全的Web视图实现。可能存在WebView任意代码执行漏洞
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05h-Testing-Platform-Interaction.md#testing-javascript-execution-in-webviews-mstg-platform-5

Files:
com/unity3d/ads/android/webapp/UnityAdsWebView.java, line(s) 99,65

中危 应用程序使用不安全的随机数生成器

应用程序使用不安全的随机数生成器
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04g-Testing-Cryptography.md#weak-random-number-generators

Files:
com/chartboost/sdk/impl/cy.java, line(s) 8
com/heyzap/http/SimpleMultipartEntity.java, line(s) 13
com/heyzap/internal/Utils.java, line(s) 45
y/z/a/m.java, line(s) 3

中危 应用程序使用SQLite数据库并执行原始SQL查询。原始SQL查询中不受信任的用户输入可能会导致SQL注入。敏感信息也应加密并写入数据库

应用程序使用SQLite数据库并执行原始SQL查询。原始SQL查询中不受信任的用户输入可能会导致SQL注入。敏感信息也应加密并写入数据库
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x04h-Testing-Code-Quality.md#injection-flaws-mstg-arch-2-and-mstg-platform-2

Files:
com/heyzap/sdk/segmentation/SQLitePastImpressionStore.java, line(s) 6,7,8,98
com/vungle/publisher/db/DatabaseHelper.java, line(s) 6,7,43

中危 此应用可能包含硬编码机密信息

从应用程序中识别出以下机密确保这些不是机密或私人信息
凭证信息=> "com.google.android.gms.appstate.APP_ID" : "\ 1073917636070"
凭证信息=> "com.google.android.gms.games.APP_ID" : "\ 1073917636070"
JiYgNTAgPD0gaGVpZ2h0Ow0KCQkJfSwNCgkJCSJvZmZzZXRYIiA6IGZ1bmN0aW9uKG9mZnNldFgp
ZA0KCQlmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVyc0ZvckV2ZW50Lmxlbmd0aDsgaSsrKSB7
DQoJCWZvciAodmFyIGkgPSAwOyBpIDwgcndQcm9wcy5sZW5ndGg7IGkrKykgew0KCQkJdmFyIHBy
CgkJCQl2YXIgdmFsaWRQb3NpdGlvbnMgPSBbICJ0b3AtbGVmdCIsICJ0b3AtY2VudGVyIiwgInRv
Q2hpbGQoaWZyYW1lKTsNCgkJaWZyYW1lID0gbnVsbDsNCgl9Ow0KDQoJZnVuY3Rpb24gZmlyZUV2
CgkJdmFyIGN1c3RvbUNsb3NlUG9zaXRpb24gPSBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJj
ZVZpZXdPblNjcmVlbihwcm9wZXJ0aWVzKSB7DQogICAgICAgIGxvZy5kKCJmaXRSZXNpemVWaWV3
aGVpZ2h0Ow0KCX07DQoNCgltcmFpZC5zZXRQbGFjZW1lbnRUeXBlID0gZnVuY3Rpb24ocHQpIHsN
dmVudC5sZW5ndGggPT09IDApIHsNCgkJCQkJZGVsZXRlIGxpc3RlbmVyc1tldmVudF07DQoJCQkJ
LmhlaWdodDsNCiAgICAgICAgcHJpbnRSZWN0KCJyZXNpemVSZWN0IiwgcmVzaXplUmVjdCk7DQoN
TkdFIiA6ICJzaXplQ2hhbmdlIiwNCgkJIlNUQVRFQ0hBTkdFIiA6ICJzdGF0ZUNoYW5nZSIsDQoJ
bmFtZSkpIHsNCgkJCQlleHBhbmRQcm9wZXJ0aWVzW3Byb3BuYW1lXSA9IHByb3BlcnRpZXNbcHJv
PT0gbXJhaWQuU1RBVEVTLkxPQURJTkcpIHsNCgkJCWZpcmVFdmVudChtcmFpZC5FVkVOVFMuU0la
e307DQoJdmFyIGlzVmlld2FibGUgPSBmYWxzZTsNCgl2YXIgaXNFeHBhbmRQcm9wZXJ0aWVzU2V0
cmVlbiA9IHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoImFsbG93T2Zmc2NyZWVuIikgPyBwcm9w
IHRoZSBhZCBpcw0KCQkvLyBhIGJhbm5lciBjdXJyZW50bHkgaW4gZWl0aGVyIGRlZmF1bHQgb3Ig
ZC5zZXRSZXNpemVQcm9wZXJ0aWVzIik7DQoJCQlyZXR1cm47DQoJCX0NCgkJDQogICAgICAgIHZh
ZXQgIiArIHByb3BlcnRpZXMub2Zmc2V0WCArICIgIiArIHByb3BlcnRpZXMub2Zmc2V0WSk7DQoN
LlBMQUNFTUVOVF9UWVBFUyA9IHsNCgkJIklOTElORSIgOiAiaW5saW5lIiwNCgkJIklOVEVSU1RJ
CiAgICAgICAgbG9nLmQoImFkanVzdG1lbnRzLnkgIiArIGFkanVzdG1lbnRzLnkpOw0KDQogICAg
DQoJCSJFWFBBTkRFRCIgOiAiZXhwYW5kZWQiLA0KCQkiUkVTSVpFRCIgOiAicmVzaXplZCIsDQoJ
CQkJcmV0dXJuOw0KCQl9DQoJCWlmICghaXNSZXNpemVSZWFkeSkgew0KCQkJbXJhaWQuZmlyZUVy
VElBTCIgOiAiaW50ZXJzdGl0aWFsIg0KCX07DQoNCgl2YXIgUkVTSVpFX1BST1BFUlRJRVNfQ1VT
bnQoIlVua25vd24gTVJBSUQgZXZlbnQ6ICIgKyBldmVudCwgInJlbW92ZUV2ZW50TGlzdGVuZXIi
ZSB7DQoJCQlsb2cuZSgic3RvcmVQaWN0dXJlIGlzIG5vdCBzdXBwb3J0ZWQiKTsNCgkJfQ0KCX07
bCA9IG1yYWlkLkxvZ0xldmVsRW51bS5OT05FOw0KCXZhciBsb2cgPSB7fTsNCg0KCWxvZy5kID0g
cGVydGllcyA9IGZ1bmN0aW9uKCkgew0KCQlsb2cuaSgibXJhaWQuZ2V0T3JpZW50YXRpb25Qcm9w
ImN1c3RvbUNsb3NlUG9zaXRpb24gIiArIGN1c3RvbUNsb3NlUG9zaXRpb24pOw0KICAgICAgICAN
VElPTi5OT05FDQoJfTsNCg0KCXZhciByZXNpemVQcm9wZXJ0aWVzID0gew0KCQkid2lkdGgiIDog
UG9zaXRpb24ud2lkdGggPSB3aWR0aDsNCgkJY3VycmVudFBvc2l0aW9uLmhlaWdodCA9IGhlaWdo
emUiKTsNCgkJcmV0dXJuIG1heFNpemU7DQoJfTsNCg0KCW1yYWlkLmdldE9yaWVudGF0aW9uUHJv
CSJWSUVXQUJMRUNIQU5HRSIgOiAidmlld2FibGVDaGFuZ2UiDQoJfTsNCg0KCXZhciBTVVBQT1JU
ZXMub2Zmc2V0WCArICIgIiArIHByb3BlcnRpZXMub2Zmc2V0WSk7DQoNCiAgICAgICAgdmFyIHJl
aXMgaW52YWxpZCIsICJtcmFpZC4iICsgYWN0aW9uKTsNCgkJCQlyZXR2YWwgPSBmYWxzZTsNCgkJ
Y2sgb24gdGhlIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcywgdG9vLg0KCQkJIndpZHRoIiA6
aCBldmVudCBhbmQgbGlzdGVuZXIgYXJlIHJlcXVpcmVkLiIsICJhZGRFdmVudExpc3RlbmVyIik7
CSJ4IiA6IDAsDQoJCSJ5IiA6IDAsDQoJCSJ3aWR0aCIgOiAwLA0KCQkiaGVpZ2h0IiA6IDANCgl9
KTsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAobGlzdGVuZXJzLmhhc093blByb3BlcnR5KGV2ZW50
cm9yRXZlbnQoIm1yYWlkLnJlc2l6ZSBpcyBub3QgcmVhZHkgdG8gYmUgY2FsbGVkIiwgIm1yYWlk
IHsNCgkJCQlyZXR1cm4gIWlzTmFOKG9mZnNldFgpOw0KCQkJfSwNCgkJCSJvZmZzZXRZIiA6IGZ1
MCwNCgkJImhlaWdodCIgOiAwLA0KCQkiY3VzdG9tQ2xvc2VQb3NpdGlvbiIgOiBSRVNJWkVfUFJP
c2l6ZVJlY3QgPSB7fTsNCiAgICAgICAgcmVzaXplUmVjdC54ID0gZGVmYXVsdFBvc2l0aW9uLngg
c3RlbmVycyByZWdpc3RlcmVkIGZvciBldmVudCAiICsgZXZlbnQpOw0KCQl9DQoJfTsNCg0KCW1y
cm47DQoJCQl9DQoJCX0NCgkJbGlzdGVuZXJzRm9yRXZlbnQucHVzaChsaXN0ZW5lcik7DQoJfTsN
bmN0aW9uKG9mZnNldFkpIHsNCgkJCQlyZXR1cm4gIWlzTmFOKG9mZnNldFkpOw0KCQkJfSwNCgkJ
LCBzbyByZW1vdmUgYWxsIGxpc3RlbmVycw0KCQkJCS8vIGZvciBnaXZlbiBldmVudA0KCQkJCWRl
Tikgew0KCQkJLy8gZG8gbm90aGluZw0KCQkJcmV0dXJuOw0KCQl9DQoJCWlmIChzdGF0ZSA9PT0g
bmdlRXZlbnQgPSBmdW5jdGlvbihuZXdTdGF0ZSkgew0KCQlsb2cuaSgibXJhaWQuZmlyZVN0YXRl
CSJjdXN0b21DbG9zZVBvc2l0aW9uIiA6IGZ1bmN0aW9uKGN1c3RvbUNsb3NlUG9zaXRpb24pIHsN
cmllbnRhdGlvblByb3BlcnRpZXMgY29udGFpbnMgMiByZWFkLXdyaXRlIHByb3BlcnRpZXM6DQoJ
CgkJaWYgKCFjb250YWlucyhldmVudCwgRVZFTlRTKSkgew0KCQkJbXJhaWQuZmlyZUVycm9yRXZl
bmFtZSA9IHJ3UHJvcHNbaV07DQoJCQlpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9w
CQlpZiAodmFsaWRhdG9yICYmICF2YWxpZGF0b3IodmFsdWUpKSB7DQoJCQkJbXJhaWQuZmlyZUVy
Y2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxpc3RlbmVyIGlzbid0IGFscmVhZHkgcmVnaXN0ZXJl
ciBhZGp1c3RtZW50cyA9IHsgIngiOiAwLCAieSI6IDAgfTsNCgkJDQoJCXZhciBhbGxvd09mZnNj
c2l0aW9uLnggKyAiICIgKyBkZWZhdWx0UG9zaXRpb24ueSk7DQogICAgICAgIGxvZy5kKCJvZmZz
ew0KCQkiRVJST1IiIDogImVycm9yIiwNCgkJIlJFQURZIiA6ICJyZWFkeSIsDQoJCSJTSVpFQ0hB
cmFpZC5zZXRSZXNpemVQcm9wZXJ0aWVzIik7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAg
CQl9DQoJCQ0KCQlpZiAoIXZhbGlkYXRlKHByb3BlcnRpZXMsICJzZXRSZXNpemVQcm9wZXJ0aWVz
bmdlRXZlbnQgPSBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7DQoJCWxvZy5pKCJtcmFpZC5maXJl
b3NpdGlvbi53aWR0aCA9IHdpZHRoOw0KCQlkZWZhdWx0UG9zaXRpb24uaGVpZ2h0ID0gaGVpZ2h0
dGVuZXJzW2V2ZW50XTsNCgkJCQkvLyB0cnkgdG8gZmluZCB0aGUgZ2l2ZW4gbGlzdGVuZXINCgkJ
DQoNCgltcmFpZC5zdXBwb3J0cyA9IGZ1bmN0aW9uKGZlYXR1cmUpIHsNCgkJbG9nLmkoIm1yYWlk
dW1lbnRzKTsNCgkJYXJncy5zaGlmdCgpOw0KCQlsb2cuaSgiZmlyZUV2ZW50ICIgKyBldmVudCAr
ICsgYWRqdXN0bWVudHMueDsNCiAgICAgICAgcmVzaXplUmVjdC55ID0gZGVmYXVsdFBvc2l0aW9u
ID0gbmV3T3JpZW50YXRpb25Qcm9wZXJ0aWVzLmZvcmNlT3JpZW50YXRpb247DQoNCgkJdmFyIHBh
b21wb25lbnQodXJsKSk7DQoJfTsNCg0KCW1yYWlkLnBsYXlWaWRlbyA9IGZ1bmN0aW9uKHVybCkg
ZXMuaGFzT3duUHJvcGVydHkocHJvcG5hbWUpKSB7DQoJCQkJbXJhaWQuZmlyZUVycm9yRXZlbnQo
CgkJInNldFJlc2l6ZVByb3BlcnRpZXMiIDogew0KCQkJIndpZHRoIiA6IGZ1bmN0aW9uKHdpZHRo
bGxvd09yaWVudGF0aW9uQ2hhbmdlID0gbmV3T3JpZW50YXRpb25Qcm9wZXJ0aWVzLmFsbG93T3Jp
YW5kZWQuDQoJCWlmIChwbGFjZW1lbnRUeXBlID09PSBQTEFDRU1FTlRfVFlQRVMuSU5URVJTVElU
bnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lcikgew0KCQlsb2cuaSgibXJhaWQu
cy55ID0gbWF4UmVjdC55IC0gcmVzaXplUmVjdC55Ow0KICAgICAgICB9IGVsc2UgaWYgKChyZXNp
IG9yaWVudGF0aW9uUHJvcGVydGllcy5mb3JjZU9yaWVudGF0aW9uOw0KDQoJCWNhbGxOYXRpdmUo
Ow0KCQlleHBhbmRQcm9wZXJ0aWVzLndpZHRoID0gd2lkdGg7DQoJCWV4cGFuZFByb3BlcnRpZXMu
cmlnaHQiDQoJfTsNCg0KCXZhciBPUklFTlRBVElPTl9QUk9QRVJUSUVTX0ZPUkNFX09SSUVOVEFU
cmFtcyA9ICJhbGxvd09yaWVudGF0aW9uQ2hhbmdlPSINCgkJCQkrIG9yaWVudGF0aW9uUHJvcGVy
c2VDdXN0b21DbG9zZSk7DQoJCX0NCgkJDQoJCWlzRXhwYW5kUHJvcGVydGllc1NldCA9IHRydWU7
RVZFTlRTLkVSUk9SLCBtZXNzYWdlLCBhY3Rpb24pOw0KCX07DQoNCgltcmFpZC5maXJlUmVhZHlF
bS1yaWdodCIgXTsNCgkJCQlyZXR1cm4gKHR5cGVvZiBjdXN0b21DbG9zZVBvc2l0aW9uID09PSAi
ZW50YXRpb25DaGFuZ2U7DQoJCW9yaWVudGF0aW9uUHJvcGVydGllcy5mb3JjZU9yaWVudGF0aW9u
aWdodCA9IGN1cnJlbnRQb3NpdGlvbi5oZWlnaHQ7DQoJCWxvZy5pKCJwcmV2aW91c1NpemUgIiAr
fQ0KCQkJfSBlbHNlIHsNCgkJCQkvLyBubyBsaXN0ZW5lciB0byByZW1vdmUgd2FzIHByb3ZpZGVk
dFNjcmVlblNpemUgPSBmdW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmdldFNjcmVlblNpemUi
YXVsdFBvc2l0aW9uLnggPSB4Ow0KCQlkZWZhdWx0UG9zaXRpb24ueSA9IHk7DQoJCWRlZmF1bHRQ
Zm91bmQgZm9yIGV2ZW50ICIgKyBldmVudCk7DQoJCQkJfQ0KCQkJCWlmIChsaXN0ZW5lcnNGb3JF
bWVudFR5cGUiKTsNCgkJcmV0dXJuIHBsYWNlbWVudFR5cGU7DQoJfTsNCg0KCW1yYWlkLmdldFJl
b21DbG9zZVBvc2l0aW9uLnNlYXJjaCgidG9wIikgIT09IC0xKSB7DQogICAgICAgICAgICBjbG9z
Y2VtZW50VHlwZSA9PT0gUExBQ0VNRU5UX1RZUEVTLklOTElORSkNCgkJCQl8fCBzdGF0ZSA9PT0g
IGNvbnRhaW5lZFJlY3QueSA+PSBjb250YWluaW5nUmVjdC55ICYmDQogICAgICAgICAgICAoY29u
Cg0KCW1yYWlkLmdldFZlcnNpb24gPSBmdW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmdldFZl
aHQgPSBwcm9wZXJ0aWVzLmhlaWdodDsNCiAgICAgICAgcHJpbnRSZWN0KCJyZXNpemVSZWN0Iiwg
dEVsZW1lbnQuYXBwZW5kQ2hpbGQoaWZyYW1lKTsNCgkJaWZyYW1lLnBhcmVudE5vZGUucmVtb3Zl
SU9OID0gbXJhaWQuT1JJRU5UQVRJT05fUFJPUEVSVElFU19GT1JDRV9PUklFTlRBVElPTiA9IHsN
b2cuaSgibXJhaWQuc2V0Q3VycmVudFBvc2l0aW9uICIgKyB4ICsgIiwiICsgeSArICIsIiArIHdp
KyAiKSIpOw0KICAgIH0NCgkNCgltcmFpZC5kdW1wTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7DQoJ
ZXMgYXJlIG5vdCBuZWVkZWQgYnkgdGhlIG5hdGl2ZSBjb2RlLikNCgkJaWYgKGV4cGFuZFByb3Bl
aW9uICIgKyB4ICsgIiwiICsgeSArICIsIiArIHdpZHRoICsgIiwiCSsgaGVpZ2h0KTsNCgkJZGVm
CWxvZy5pKCJtcmFpZC5jcmVhdGVDYWxlbmRhckV2ZW50IHdpdGggIiArIHBhcmFtZXRlcnMpOw0K
YXVsdFBvc2l0aW9uLnggKyBwcm9wZXJ0aWVzLm9mZnNldFg7DQogICAgICAgIHJlc2l6ZVJlY3Qu
c0N1c3RvbUNsb3NlKSB7DQoJCWxvZy5pKCJtcmFpZC51c2VDdXN0b21DbG9zZSAiICsgaXNDdXN0
dGFpbmVkIik7DQogICAgICAgIHByaW50UmVjdCgiY29udGFpbmluZ1JlY3QiLCBjb250YWluaW5n
ZXRZLg0KCQkvLyBUaGUgcmVtYWluaW5nIHR3byBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC4NCgkJ
bGlzdGVuZXJzIGZvdW5kIik7DQoJCX0NCgl9Ow0KDQoJZnVuY3Rpb24gY29udGFpbnModmFsdWUs
LmhlaWdodCA9IG1heFNpemUuaGVpZ2h0Ow0KDQogICAgICAgIHZhciBhZGp1c3RtZW50cyA9IHsg
ZXhwYW5kP3VybD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCkpOw0KCQl9DQoJfTsNCg0KCW1y
c0ZvckV2ZW50LnNwbGljZShpLCAxKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJ
CgkJbG9nLmkoIm1yYWlkLnNldFBsYWNlbWVudFR5cGUgIiArIHB0KTsNCgkJcGxhY2VtZW50VHlw
LCBhbGxvd09mZnNjcmVlbg0KDQoJCS8vIFRoZSBwcm9wZXJ0aWVzIG9iamVjdCBwYXNzZWQgaW50
ZXZpb3VzU2l6ZS5oZWlnaHQpIHsNCgkJCW1yYWlkLmZpcmVTaXplQ2hhbmdlRXZlbnQod2lkdGgs
cmVzaXplUmVjdCk7DQoNCiAgICAgICAgdmFyIG1heFJlY3QgPSB7ICJ4IjogMCwgInkiOiAwIH07
dGVuZXJzLmxlbmd0aCArICIgbGlzdGVuZXJzIik7DQoJCQlmb3IgKHZhciBpID0gMDsgaSA8IGV2
Cg0KCW1yYWlkLmNyZWF0ZUNhbGVuZGFyRXZlbnQgPSBmdW5jdGlvbihwYXJhbWV0ZXJzKSB7DQoJ
cm9yRXZlbnQgIiArIG1lc3NhZ2UgKyAiICIgKyBhY3Rpb24pOw0KCQlmaXJlRXZlbnQobXJhaWQu
UkVQSUNUVVJFIiA6ICJzdG9yZVBpY3R1cmUiLA0KCQkiSU5MSU5FVklERU8iIDogImlubGluZVZp
IHByZXZpb3VzU2l6ZS53aWR0aCArICIsIiArIHByZXZpb3VzU2l6ZS5oZWlnaHQpOw0KDQoJCWN1
IGlzIHJlcXVpcmVkLiIsICJyZW1vdmVFdmVudExpc3RlbmVyIik7DQoJCQlyZXR1cm47DQoJCX0N
IHsNCgkJCWNhbGxOYXRpdmUoImV4cGFuZCIpOw0KCQl9IGVsc2Ugew0KCQkJY2FsbE5hdGl2ZSgi
Vmlld2FibGUpIHsNCgkJCWlzVmlld2FibGUgPSBuZXdJc1ZpZXdhYmxlOw0KCQkJZmlyZUV2ZW50
ZHRoIG9yIGhlaWdodCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heFNpemUgd2lkdGggb3IgaGVpZ2h0
cHJvcGVydGllcywgInNldEV4cGFuZFByb3BlcnRpZXMiKSkgew0KCQkJbG9nLmUoImZhaWxlZCB2
cyBieSBkZWZpbml0aW9uIGNvdmVyIHRoZSBlbnRpcmUgc2NyZWVuLA0KCQkvLyBzbyB0aGUgb25s
SUFMIHx8IHN0YXRlID09PSBTVEFURVMuTE9BRElORyB8fCBzdGF0ZSA9PT0gU1RBVEVTLkhJRERF
ICAgIGlmIChyZXNpemVSZWN0LnggPCBtYXhSZWN0LngpIHsNCiAgICAgICAgICAgIGFkanVzdG1l
cnNpb24iKTsNCgkJcmV0dXJuIFZFUlNJT047DQoJfTsNCg0KCW1yYWlkLmlzVmlld2FibGUgPSBm
CgkJIkVSUk9SIiAgIDogMywNCgkJIk5PTkUiICAgIDogNA0KCX07DQoNCgltcmFpZC5sb2dMZXZl
bXJhaWQuZmlyZUVycm9yRXZlbnQoIlVua25vd24gTVJBSUQgZXZlbnQ6ICIgKyBldmVudCwgImFk
dmFyIHJlcXVpcmVkUHJvcHMgPSBbICJ3aWR0aCIsICJoZWlnaHQiLCAib2Zmc2V0WCIsICJvZmZz
OyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJdmFyIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGxpc3RlbmVy
aXMNCgkJLy8gYSBiYW5uZXIgY3VycmVudGx5IGluIGVpdGhlciBkZWZhdWx0IG9yIHJlc2l6ZWQg
IGNhbGxlZCB3aGVuIGFkIGlzIGluIGV4cGFuZGVkIHN0YXRlIiwgIm1yYWlkLnJlc2l6ZSIpOw0K
b3BuYW1lKSkgew0KCQkJCW5ld09yaWVudGF0aW9uUHJvcGVydGllc1twcm9wbmFtZV0gPSBwcm9w
IH0NCgkJDQoJCXZhciByd1Byb3BzID0gWyAid2lkdGgiLCAiaGVpZ2h0IiwgIm9mZnNldFgiLCAi
ZnVuY3Rpb24obXNnKSB7DQoJCWlmIChtcmFpZC5sb2dMZXZlbCA8PSBtcmFpZC5Mb2dMZXZlbEVu
eSBwcm9wZXJ0eSB0aGF0IHRoZSBuYXRpdmUgc2lkZSBoYXMgdG8ga25vdyBhYm91dCBpcyB1c2VD
ICAgIHJlc2l6ZVJlY3QueCA9IGRlZmF1bHRQb3NpdGlvbi54ICsgcHJvcGVydGllcy5vZmZzZXRY
KioqKioqKioqKioqLw0KDQoJZnVuY3Rpb24gY2FsbE5hdGl2ZShjb21tYW5kKSB7DQoJCXZhciBp
dEV4cGFuZFByb3BlcnRpZXMiKTsNCgkJcmV0dXJuIGV4cGFuZFByb3BlcnRpZXM7DQoJfTsNCg0K
YW5nZUV2ZW50ICIgKyBuZXdJc1ZpZXdhYmxlKTsNCgkJaWYgKGlzVmlld2FibGUgIT09IG5ld0lz
dGllcy5hbGxvd09yaWVudGF0aW9uQ2hhbmdlDQoJCQkJKyAiJmZvcmNlT3JpZW50YXRpb249IiAr
IiwgIm1yYWlkLnNldFJlc2l6ZVByb3BlcnRpZXMiKTsNCiAgICAgICAgICAgICAgICByZXR1cm47
DQoJfTsNCg0KCW1yYWlkLnNldE9yaWVudGF0aW9uUHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3Bl
bnRzLnggPSBtYXhSZWN0LnggLSByZXNpemVSZWN0Lng7DQogICAgICAgIH0gZWxzZSBpZiAoKHJl
U1RBVEVTLkVYUEFOREVEKSB7DQoJCQltcmFpZC5maXJlRXJyb3JFdmVudCgibXJhaWQucmVzaXpl
b24NCgkvLyAoaW4gb3RoZXIgd29yZHMsIHNldEV4cGFuZFByb3BldGllcywgc2V0T3JpZW50YXRp
W2V2ZW50XTsNCgkJCWxvZy5pKCIgICIgKyBldmVudCArICIgY29udGFpbnMgIiArIGV2ZW50TGlz
b3BuYW1lID0gcndQcm9wc1tpXTsNCgkJCWlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHBy
Ly8NCi8vICBtcmFpZC5qcw0KLy8NCg0KKGZ1bmN0aW9uKCkgew0KCQ0KCWNvbnNvbGUubG9nKCJN
DQoJCX0sDQoJCSJzZXRPcmllbnRhdGlvblByb3BlcnRpZXMiIDogew0KCQkJImFsbG93T3JpZW50
LnN1cHBvcnRzICIgKyBmZWF0dXJlICsgIiAiICsgc3VwcG9ydGVkRmVhdHVyZXNbZmVhdHVyZV0p
Ow0KDQoJdmFyIG1heFNpemUgPSB7DQoJCSJ3aWR0aCIgOiAwLA0KCQkiaGVpZ2h0IiA6IDANCgl9
U1RBVEVTLkhJRERFTikgew0KCQkJLy8gZG8gbm90aGluZw0KCQkJcmV0dXJuOw0KCQl9DQoJCWNh
DQoJCSJOT05FIiA6ICJub25lIg0KCX07DQoNCgl2YXIgRVZFTlRTID0gbXJhaWQuRVZFTlRTID0g
CWlmIChpID09PSBsZW4pIHsNCgkJCQkJbG9nLmkoImxpc3RlbmVyICIgKyBzdHIxICsgIiBub3Qg
Ow0KCX07DQoNCgltcmFpZC5zZXRFeHBhbmRTaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodCkg
U2NyZWVuKHByb3BlcnRpZXMpKSB7DQogICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgi
IDogMCwNCgkJImhlaWdodCIgOiAwDQoJfTsNCg0KCXZhciBkZWZhdWx0UG9zaXRpb24gPSB7DQoJ
DQogICAgICAgIG1heFJlY3Qud2lkdGggPSBtYXhTaXplLndpZHRoOw0KICAgICAgICBtYXhSZWN0
ZSA9IHB0Ow0KCX07DQoNCgltcmFpZC5zZXRTY3JlZW5TaXplID0gZnVuY3Rpb24od2lkdGgsIGhl
ZXRZIiBdOw0KCQlmb3IgKHZhciBpID0gMDsgaSA8IHJlcXVpcmVkUHJvcHMubGVuZ3RoOyBpKysp
DQoJCQl9LA0KCQkJInVzZUN1c3RvbUNsb3NlIiA6IGZ1bmN0aW9uKHVzZUN1c3RvbUNsb3NlKSB7
TV9DRU5URVIiIDogImJvdHRvbS1jZW50ZXIiLA0KCQkiQk9UVE9NX1JJR0hUIiA6ICJib3R0b20t
b2YgcmV0dmFsID09PSAidW5kZWZpbmVkIikgew0KCQkJcmV0dmFsID0gZmFsc2U7DQoJCX0NCgkJ
Cgl9Ow0KDQoJbG9nLmkgPSBmdW5jdGlvbihtc2cpIHsNCgkJaWYgKG1yYWlkLmxvZ0xldmVsIDw9
ICAgICAgICBtYXhSZWN0LndpZHRoID0gbWF4U2l6ZS53aWR0aDsNCiAgICAgICAgbWF4UmVjdC5o
IHsNCgkJCXZhciBwcm9wbmFtZSA9IHJlcXVpcmVkUHJvcHNbaV07DQoJCQlpZiAoIXByb3BlcnRp
cmV0dXJuIHJldHZhbDsNCgl9Ow0KDQoJbXJhaWQudXNlQ3VzdG9tQ2xvc2UgPSBmdW5jdGlvbihp
CSJISURERU4iIDogImhpZGRlbiINCgl9Ow0KDQoJdmFyIFBMQUNFTUVOVF9UWVBFUyA9IG1yYWlk
b3IgKHZhciBpID0gMDsgaSA8IHJ3UHJvcHMubGVuZ3RoOyBpKyspIHsNCgkJCXZhciBwcm9wbmFt
KioqKioqKioqKioqKioqKi8NCg0KCS8vIHNldHRlcnMgdG8gY2hhbmdlIHN0YXRlDQoJbXJhaWQu
YWlkLmdldERlZmF1bHRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgew0KCQlsb2cuaSgibXJhaWQuZ2V0
CWlmICghZXZlbnQgfHwgIWxpc3RlbmVyKSB7DQoJCQltcmFpZC5maXJlRXJyb3JFdmVudCgiQm90
CW1yYWlkLmdldE1heFNpemUgPSBmdW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmdldE1heFNp
DQogICAgICAgIGlmIChjdXN0b21DbG9zZVBvc2l0aW9uLnNlYXJjaCgibGVmdCIpICE9PSAtMSkg
YWRkRXZlbnRMaXN0ZW5lciAiICsgZXZlbnQgKyAiOiAiICsgU3RyaW5nKGxpc3RlbmVyKSk7DQoJ
UmVzaXplUHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHsNCgkJbG9nLmkoIm1yYWlk
KioqKioqKioqKioqKioqKioqDQoJICogaGVscGVyIG1ldGhvZHMgY2FsbGVkIGJ5IFNESw0KCSAq
CQkJCXZhciB2YWxpZFZhbHVlcyA9IFsgInBvcnRyYWl0IiwgImxhbmRzY2FwZSIsICJub25lIiBd
ZHRoICsgIiwiCSsgaGVpZ2h0KTsNCg0KCQl2YXIgcHJldmlvdXNTaXplID0ge307DQoJCXByZXZp
b3BlcnRpZXMiKTsNCgkJcmV0dXJuIHJlc2l6ZVByb3BlcnRpZXM7DQoJfTsNCg0KCW1yYWlkLmdl
c0ZvckV2ZW50W2ldOw0KCQkJCQl2YXIgc3RyMSA9IFN0cmluZyhsaXN0ZW5lcik7DQoJCQkJCXZh
bWVdOw0KCQkJfQ0KCQl9DQoJCQ0KCQl2YXIgcGFyYW1zID0NCgkJCSJ3aWR0aD0iICsgcmVzaXpl
cmVlbj0iICsgcmVzaXplUHJvcGVydGllcy5hbGxvd09mZnNjcmVlbjsNCg0KCQljYWxsTmF0aXZl
YWRqdXN0bWVudHMueCkgKw0KCSAgICAgICAgIiZvZmZzZXRZPSIgKyAocmVzaXplUHJvcGVydGll
dmVudCA9IGZ1bmN0aW9uKCkgew0KCQlsb2cuaSgibXJhaWQuZmlyZVJlYWR5RXZlbnQiKTsNCgkJ
2741b4b2f9c14003c3580be594ec921c
ZWlnaHQpOw0KCQlzY3JlZW5TaXplLndpZHRoID0gd2lkdGg7DQoJCXNjcmVlblNpemUuaGVpZ2h0
RVMuUkVTSVpFRCkpIHsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZiAodXJsID09PSB1bmRlZmluZWQp
VmlkZW8/dXJsPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXJsKSk7DQoJfTsNCg0KCW1yYWlkLnJl
c3RvbUNsb3NlKSB7DQoJCQlleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlID0gaXNDdXN0
ICAgICAgbG9nLmQoImRlZmF1bHRQb3NpdGlvbiAiICsgZGVmYXVsdFBvc2l0aW9uLnggKyAiICIg
YXRpb25DaGFuZ2UNCgkJCQkmJiBuZXdPcmllbnRhdGlvblByb3BlcnRpZXMuZm9yY2VPcmllbnRh
RUNIQU5HRSwgd2lkdGgsIGhlaWdodCk7DQoJCX0NCgl9Ow0KDQoJbXJhaWQuZmlyZVN0YXRlQ2hh
YXRpb25DaGFuZ2UiIDogZnVuY3Rpb24oYWxsb3dPcmllbnRhdGlvbkNoYW5nZSkgew0KCQkJCXJl
ZSBpZiAoY3VzdG9tQ2xvc2VQb3NpdGlvbi5zZWFyY2goImNlbnRlciIpICE9PSAtMSkgew0KICAg
ZXJ0aWVzID0gew0KCQkid2lkdGgiIDogMCwNCgkJImhlaWdodCIgOiAwLA0KCQkidXNlQ3VzdG9t
aWVzLmFsbG93T3JpZW50YXRpb25DaGFuZ2UgPSBvcmllbnRhdGlvblByb3BlcnRpZXMuYWxsb3dP
bGlkVmFsdWVzLmluZGV4T2YoZm9yY2VPcmllbnRhdGlvbikgIT09IC0xKTsNCgkJCX0NCgkJfSwN
KiovDQoNCgl2YXIgVkVSU0lPTiA9ICIyLjAiOw0KDQoJdmFyIFNUQVRFUyA9IG1yYWlkLlNUQVRF
DQoNCgltcmFpZC5zZXRFeHBhbmRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydGllcykgew0K
UHJvcGVydGllcy53aWR0aCArDQoJCQkiJmhlaWdodD0iICsgcmVzaXplUHJvcGVydGllcy5oZWln
IngiOiAwLCAieSI6IDAgfTsNCg0KICAgICAgICBpZiAoaXNSZWN0Q29udGFpbmVkKG1heFJlY3Qs
ImhlaWdodCIgOiBmdW5jdGlvbihoZWlnaHQpIHsNCgkJCQlyZXR1cm4gIWlzTmFOKGhlaWdodCk7
ZW5lcnNbaV0pOw0KCQkJfQ0KCQl9DQoJfTsNCgkNCgljb25zb2xlLmxvZygiTVJBSUQgb2JqZWN0
cmFpZC5sb2dMZXZlbCA8PSBtcmFpZC5Mb2dMZXZlbEVudW0uV0FSTklORykgew0KCQkJY29uc29s
eSBwcm9wZXJ0eSBpbiBleHBhbmRQcm9wZXJ0aWVzIHdlIGFjdHVhbGx5IGNhcmUgYWJvdXQgaXMg
ICAgIGNsb3NlUmVjdC55ID0gcmVzaXplUmVjdC55ICsgcmVzaXplUmVjdC5oZWlnaHQgLSA1MDsN
c3VwcG9ydGVkKSB7DQoJCWxvZy5pKCJtcmFpZC5zZXRTdXBwb3J0cyAiICsgZmVhdHVyZSArICIg
DQoJCQlsb2cuZSgiZmFpbGVkIHZhbGlkYXRpb24iKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCXZh
b21DbG9zZSk7DQoJCWlmIChleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlICE9PSBpc0N1
dmVudCA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGFjdGlvbikgew0KCQlsb2cuaSgibXJhaWQuZmlyZUVy
W21yYWlkLlNVUFBPUlRFRF9GRUFUVVJFUy5TVE9SRVBJQ1RVUkVdKSB7DQoJCQljYWxsTmF0aXZl
Y2xvc2UgZXZlbnQgcmVnaW9uIHdpbGwgbm90IGFwcGVhciBlbnRpcmVseSBvbnNjcmVlbiIsICJt
CiAgICAgICAgfQ0KDQogICAgICAgIHZhciBtYXhSZWN0ID0geyAieCI6IDAsICJ5IjogMCB9Ow0K
bGV0ZSBsaXN0ZW5lcnNbZXZlbnRdOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJbG9nLmkoIm5vIGxp
c2VDdXN0b21DbG9zZTsNCgkJLy8gdGhlIGlzTW9kYWwgcHJvcGVydHkgaXMgcmVhZC1vbmx5DQoJ
ImhlaWdodCIgOiBmdW5jdGlvbihoZWlnaHQpIHsNCgkJCQlyZXR1cm4gIWlzTmFOKGhlaWdodCkg
ZW50W2ldIHx8IHN0cjEgPT09IHN0cjIpIHsNCgkJCQlsb2cuaSgibGlzdGVuZXIgIiArIHN0cjEg
CQlsb2cuaSgibXJhaWQuc2V0RXhwYW5kUHJvcGVydGllcyIpOw0KDQoJCWlmICghdmFsaWRhdGUo
ZWlnaHQpIHsNCiAgICAgICAgICAgICAgICBtcmFpZC5maXJlRXJyb3JFdmVudCgicmVzaXplIHdp
YWRqdXN0bWVudHM7DQogICAgfQ0KICAgIA0KICAgIGZ1bmN0aW9uIGlzUmVjdENvbnRhaW5lZChj
dGlvbkNoYW5nZSB0byB0cnVlIHdoaWxlIHNldHRpbmcgZm9yY2VPcmllbnRhdGlvbg0KCQkvLyB0
ZSA9IHJ3UHJvcHNbaV07DQoJCQlpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wbmFt
c2V0Q3VycmVudFBvc2l0aW9uID0gZnVuY3Rpb24oeCwgeSwgd2lkdGgsIGhlaWdodCkgew0KCQls
InJpZ2h0IikgIT09IC0xKSB7DQogICAgICAgICAgICBjbG9zZVJlY3QueCA9IHJlc2l6ZVJlY3Qu
Uk9SKSB7DQoJCQljb25zb2xlLmxvZygiKEUtbXJhaWQuanMpICIgKyBtc2cpOw0KCQl9DQoJfTsN
KGN1c3RvbUNsb3NlUG9zaXRpb24uc2VhcmNoKCJib3R0b20iKSAhPT0gLTEpIHsNCiAgICAgICAg
ZW50KGV2ZW50KSB7DQoJCXZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
IHZhbHVlKSB7DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0K
KyAocmVjdC54ICsgcmVjdC53aWR0aCkgKyAiLCIgKyAocmVjdC55ICsgcmVjdC5oZWlnaHQpICsg
IikpIHsNCgkJCW1yYWlkLmZpcmVFcnJvckV2ZW50KCJmYWlsZWQgdmFsaWRhdGlvbiIsICJtcmFp
dmVudExpc3RlbmVycy5sZW5ndGg7DQoJCQlsb2cuaShsZW4gKyAiIGxpc3RlbmVyKHMpIGZvdW5k
CS8vIGFsbG93T3JpZW50YXRpb25DaGFuZ2UgYW5kIGZvcmNlT3JpZW50YXRpb24NCgkJdmFyIHJ3
ZWVuKSB7DQoJCQkJcmV0dXJuICh0eXBlb2YgYWxsb3dPZmZzY3JlZW4gPT09ICJib29sZWFuIik7
YWlkLnJlc2l6ZSA9IGZ1bmN0aW9uKCkgew0KCQlsb2cuaSgibXJhaWQucmVzaXplIik7DQoJCS8v
KG1yYWlkLkVWRU5UUy5WSUVXQUJMRUNIQU5HRSwgaXNWaWV3YWJsZSk7DQoJCX0NCgl9Ow0KDQoJ
KSB7DQoJCQkJcmV0dXJuICFpc05hTih3aWR0aCkgJiYgNTAgPD0gd2lkdGg7DQoJCQl9LA0KCQkJ
ZmlyZUV2ZW50KG1yYWlkLkVWRU5UUy5SRUFEWSk7DQoJfTsNCg0KCW1yYWlkLmZpcmVTaXplQ2hh
eSA9IGRlZmF1bHRQb3NpdGlvbi55ICsgcHJvcGVydGllcy5vZmZzZXRZOw0KICAgICAgICByZXNp
aW9uXTsNCgkJZm9yICh2YXIgcHJvcCBpbiBwcm9wZXJ0aWVzKSB7DQoJCQl2YXIgdmFsaWRhdG9y
dDsNCg0KCQlpZiAod2lkdGggIT09IHByZXZpb3VzU2l6ZS53aWR0aCB8fCBoZWlnaHQgIT09IHBy
d2lkdGgpIC0gKHJlc2l6ZVJlY3QueCArIHJlc2l6ZVJlY3Qud2lkdGgpOw0KICAgICAgICB9DQog
IDIpIC0gMjU7DQogICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tQ2xvc2VQb3NpdGlvbi5zZWFyY2go
KyBwcm9wZXJ0aWVzLm9mZnNldFg7DQogICAgICAgIHJlc2l6ZVJlY3QueSA9IGRlZmF1bHRQb3Np
emVSZWN0LnkgKyByZXNpemVSZWN0LmhlaWdodCkgPiAobWF4UmVjdC55ICsgbWF4UmVjdC5oZWln
c2l6ZVJlY3QueCArIHJlc2l6ZVJlY3Qud2lkdGgpID4gKG1heFJlY3QueCArIG1heFJlY3Qud2lk
ID0gdmFsaWRhdG9yc1twcm9wXTsNCgkJCXZhciB2YWx1ZSA9IHByb3BlcnRpZXNbcHJvcF07DQoJ
DQoJCQkJcmV0dXJuICh0eXBlb2YgdXNlQ3VzdG9tQ2xvc2UgPT09ICJib29sZWFuIik7DQoJCQl9
YWxlbmRhckV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQiKTsNCgkJfQ0KCX07DQoNCgltcmFpZC5jbG9z
ZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJRlJBTUUiKTsNCgkJaWZyYW1lLnNldEF0
Ow0KCQkJCXJldHVybiAodHlwZW9mIGZvcmNlT3JpZW50YXRpb24gPT09ICJzdHJpbmciICYmIHZh
LnJlc2l6ZSIpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCWNhbGxOYXRpdmUoInJlc2l6ZSIpOw0KCX07
KyBkZWZhdWx0UG9zaXRpb24ueSk7DQogICAgICAgIGxvZy5kKCJvZmZzZXQgIiArIHByb3BlcnRp
IDogInRvcC1jZW50ZXIiLA0KCQkiVE9QX1JJR0hUIiA6ICJ0b3AtcmlnaHQiLA0KCQkiQ0VOVEVS
IGZ1bmN0aW9uKHdpZHRoKSB7DQoJCQkJcmV0dXJuICFpc05hTih3aWR0aCk7DQoJCQl9LA0KCQkJ
ZW50TGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7DQoJCQkJbG9nLmkoIiAgICAiICsgZXZlbnRMaXN0
PSBTVEFURVMuTE9BRElORw0KCQkJCXx8IChzdGF0ZSA9PT0gU1RBVEVTLkRFRkFVTFQgJiYgcGxh
KGNvbnRhaW5pbmdSZWN0LnggKyBjb250YWluaW5nUmVjdC53aWR0aCkgJiYNCiAgICAgICAgICAg
Cgl9Ow0KDQoJdmFyIGN1cnJlbnRPcmllbnRhdGlvbiA9IDA7DQoNCgl2YXIgbGlzdGVuZXJzID0g
cyIsDQoJCSJURUwiIDogInRlbCIsDQoJCSJDQUxFTkRBUiIgOiAiY2FsZW5kYXIiLA0KCQkiU1RP
LmkoIm1yYWlkLnN0b3JlUGljdHVyZSAiICsgdXJsKTsNCgkJaWYgKHN1cHBvcnRlZEZlYXR1cmVz
ZXMud2lkdGggPiBtYXhTaXplLndpZHRoIHx8IHByb3BlcnRpZXMuaGVpZ2h0ID4gbWF4U2l6ZS5o
IiArIHN1cHBvcnRlZCk7DQoJCXN1cHBvcnRlZEZlYXR1cmVzW2ZlYXR1cmVdID0gc3VwcG9ydGVk
KCJzZXRSZXNpemVQcm9wZXJ0aWVzPyIgKyBwYXJhbXMpOw0KDQoJCWlzUmVzaXplUmVhZHkgPSB0
T25TY3JlZW4iKTsNCiAgICAgICAgbG9nLmQoImRlZmF1bHRQb3NpdGlvbiAiICsgZGVmYXVsdFBv
CQkvLyB3aWR0aCwgaGVpZ2h0LCBvZmZzZXRYLCBvZmZzZXRZLCBjdXN0b21DbG9zZVBvc2l0aW9u
ICsgY29udGFpbmluZ1JlY3QuaGVpZ2h0KSk7DQogICAgfQ0KICAgIA0KICAgIGZ1bmN0aW9uIHBy
VHlwZSA9IFBMQUNFTUVOVF9UWVBFUy5JTkxJTkU7DQoJdmFyIHN1cHBvcnRlZEZlYXR1cmVzID0g
LnNldFJlc2l6ZVByb3BlcnRpZXMiKTsNCgkJDQoJCWlzUmVzaXplUmVhZHkgPSBmYWxzZTsNCg0K
CgkJCQkJCSJtcmFpZC5zZXRSZXNpemVQcm9wZXJ0aWVzIik7DQoJCQkJcmV0dXJuOw0KCQkJfQ0K
UyA9IHsNCgkJIkxPQURJTkciIDogImxvYWRpbmciLA0KCQkiREVGQVVMVCIgOiAiZGVmYXVsdCIs
RGVmYXVsdFBvc2l0aW9uIik7DQoJCXJldHVybiBkZWZhdWx0UG9zaXRpb247DQoJfTsNCg0KCW1y
cyB3ZWxsIGFzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIG9mIGFueSBlcnJvciBldmVudCB0aGF0IG1h
b24oeCwgeSwgd2lkdGgsIGhlaWdodCkgew0KCQlsb2cuaSgibXJhaWQuc2V0RGVmYXVsdFBvc2l0
aWdodCkgew0KCQlsb2cuaSgibXJhaWQuc2V0U2NyZWVuU2l6ZSAiICsgd2lkdGggKyAieCIgKyBo
UHJvcHMgPSBbICJhbGxvd09yaWVudGF0aW9uQ2hhbmdlIiwgImZvcmNlT3JpZW50YXRpb24iIF07
KyBoZWlnaHQpOw0KCQltYXhTaXplLndpZHRoID0gd2lkdGg7DQoJCW1heFNpemUuaGVpZ2h0ID0g
ZSkpIHsNCgkJCQlyZXNpemVQcm9wZXJ0aWVzW3Byb3BuYW1lXSA9IHByb3BlcnRpZXNbcHJvcG5h
aXZlKCJ1c2VDdXN0b21DbG9zZT91c2VDdXN0b21DbG9zZT0iCSsgZXhwYW5kUHJvcGVydGllcy51
dGFpbmVkUmVjdC55ICsgY29udGFpbmVkUmVjdC5oZWlnaHQpIDw9IChjb250YWluaW5nUmVjdC55
IGV2ZW50IGluIGxpc3RlbmVycykgew0KCQkJdmFyIGV2ZW50TGlzdGVuZXJzID0gbGlzdGVuZXJz
dGlvbiAhPT0gbXJhaWQuT1JJRU5UQVRJT05fUFJPUEVSVElFU19GT1JDRV9PUklFTlRBVElPTi5O
bGxOYXRpdmUoImNsb3NlIik7DQoJfTsNCg0KCW1yYWlkLmV4cGFuZCA9IGZ1bmN0aW9uKHVybCkg
b3IgY29uZGl0aW9uLg0KCQlpZiAobmV3T3JpZW50YXRpb25Qcm9wZXJ0aWVzLmFsbG93T3JpZW50
b21DbG9zZTsNCgkJCWNhbGxOYXRpdmUoInVzZUN1c3RvbUNsb3NlP3VzZUN1c3RvbUNsb3NlPSIN
aGFuZ2UgaXMgdHJ1ZSBidXQgZm9yY2VPcmllbnRhdGlvbiBpcyAiDQoJCQkJCSsgbmV3T3JpZW50
CQlpZiAoc3VwcG9ydGVkRmVhdHVyZXNbbXJhaWQuU1VQUE9SVEVEX0ZFQVRVUkVTLkNBTEVOREFS
VE9NX0NMT1NFX1BPU0lUSU9OID0gbXJhaWQuUkVTSVpFX1BST1BFUlRJRVNfQ1VTVE9NX0NMT1NF
Ow0KCQl2YXIgcmV0dmFsID0gc3VwcG9ydGVkRmVhdHVyZXNbZmVhdHVyZV07DQoJCWlmICh0eXBl
KioqKioqKiovDQoNCgl2YXIgc3RhdGUgPSBTVEFURVMuTE9BRElORzsNCgl2YXIgcGxhY2VtZW50
YWlkLmdldEN1cnJlbnRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgew0KCQlsb2cuaSgibXJhaWQuZ2V0
IGZ1bmN0aW9uKG5ld0lzVmlld2FibGUpIHsNCgkJbG9nLmkoIm1yYWlkLmZpcmVWaWV3YWJsZUNo
dW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmlzVmlld2FibGUiKTsNCgkJcmV0dXJuIGlzVmll
cGVydGllcy53aWR0aCA9IHdpZHRoOw0KCQkJZXhwYW5kUHJvcGVydGllcy5oZWlnaHQgPSBoZWln
YXRpbmcNCgkvLyBmdW5jdGlvbnMgZnJvbSB0aGUgYWxsVmFsaWRhdG9ycyBvYmplY3QNCgkvLyBh
eCArIHJlc2l6ZVJlY3Qud2lkdGggLSA1MDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChjdXN0
CQkvLyByZXNpemVQcm9wZXJ0aWVzIGNvbnRhaW5zIDYgcmVhZC13cml0ZSBwcm9wZXJ0aWVzOg0K
b24oKSB7DQoJCWxvZy5pKCJtcmFpZC5nZXRTdGF0ZSIpOw0KCQlyZXR1cm4gc3RhdGU7DQoJfTsN
Y3QoImFkanVzdGVkIHJlc2l6ZVJlY3QiLCByZXNpemVSZWN0KTsNCg0KICAgICAgICByZXR1cm4g
cnkiKTsNCiAgICAgICAgICAgIHJldHVybiBhZGp1c3RtZW50czsNCiAgICAgICAgfQ0KDQogICAg
aXN0ZW5lcnNGb3JFdmVudFtpXSk7DQoJCQlpZiAobGlzdGVuZXIgPT09IGxpc3RlbmVyc0ZvckV2
cmllbnRhdGlvbkNoYW5nZSwNCgkJbmV3T3JpZW50YXRpb25Qcm9wZXJ0aWVzLmZvcmNlT3JpZW50
dGVuZXIpKTsNCgkJaWYgKCFldmVudCkgew0KCQkJbXJhaWQuZmlyZUVycm9yRXZlbnQoIkV2ZW50
CQkJc3RhdGUgPSBuZXdTdGF0ZTsNCgkJCWZpcmVFdmVudChtcmFpZC5FVkVOVFMuU1RBVEVDSEFO
c3RhdGUuDQoJCS8vIFRyaWdnZXIgYW4gZXJyb3IgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgZXhw
CgkJIlBPUlRSQUlUIiA6ICJwb3J0cmFpdCIsDQoJCSJMQU5EU0NBUEUiIDogImxhbmRzY2FwZSIs
XSkgew0KCQkJY2FsbE5hdGl2ZSgiY3JlYXRlQ2FsZW5kYXJFdmVudD9ldmVudEpTT049IgkrIEpT
KCJzdG9yZVBpY3R1cmU/dXJsPSIgKyBlbmNvZGVVUklDb21wb25lbnQodXJsKSk7DQoJCX0gZWxz
dHJpYnV0ZSgic3JjIiwgIm1yYWlkOi8vIiArIGNvbW1hbmQpOw0KCQlkb2N1bWVudC5kb2N1bWVu
Im1yYWlkLnJlbW92ZUV2ZW50TGlzdGVuZXIgIiArIGV2ZW50ICsgIiA6ICIgKyBTdHJpbmcobGlz
CX07DQoNCgkvLyBUaGUgYWN0aW9uIHBhcmFtZXRlciBpcyBhIHN0cmluZyB3aGljaCBpcyB0aGUg
CgkJCQkJKyBleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlKTsNCgkJfQ0KCX07DQoNCgkv
YXRpb25Qcm9wZXJ0aWVzLmZvcmNlT3JpZW50YXRpb24sDQoJCQkJCSJzZXRPcmllbnRhdGlvblBy
ew0KCQlpZiAodXJsID09PSB1bmRlZmluZWQpIHsNCgkJCWxvZy5pKCJtcmFpZC5leHBhbmQgKDEt
DQoJCQl2YXIgc3RyMSA9IFN0cmluZyhsaXN0ZW5lcik7DQoJCQl2YXIgc3RyMiA9IFN0cmluZyhs
aGVpZ2h0ID0gaGVpZ2h0Ow0KCX07DQoNCgltcmFpZC5zZXRNYXhTaXplID0gZnVuY3Rpb24od2lk
PSBleHBhbmRQcm9wZXJ0aWVzLnVzZUN1c3RvbUNsb3NlOw0KDQoJCS8vIGV4cGFuZFByb3BlcnRp
ZWlnaHQgPSBtYXhTaXplLmhlaWdodDsNCg0KICAgICAgICByZXR1cm4gaXNSZWN0Q29udGFpbmVk
IHJlc2l6ZVJlY3QpKSB7DQogICAgICAgICAgICBsb2cuZCgibm8gYWRqdXN0bWVudCBuZWNlc3Nh
cy5vZmZzZXRZICsgYWRqdXN0bWVudHMueSkgKw0KCQkJIiZjdXN0b21DbG9zZVBvc2l0aW9uPSIg
b2Zmc2V0WSIsICJjdXN0b21DbG9zZVBvc2l0aW9uIiwgImFsbG93T2Zmc2NyZWVuIiBdOw0KCQlm
Ow0KDQoJdmFyIHNjcmVlblNpemUgPSB7DQoJCSJ3aWR0aCIgOiAwLA0KCQkiaGVpZ2h0IiA6IDAN
Q3VycmVudFBvc2l0aW9uIik7DQoJCXJldHVybiBjdXJyZW50UG9zaXRpb247DQoJfTsNCg0KCW1y
ZVJlY3QueSA9IHJlc2l6ZVJlY3QueTsNCiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21DbG9zZVBv
ew0KICAgICAgICAgICAgY2xvc2VSZWN0LnggPSByZXNpemVSZWN0Lng7DQogICAgICAgIH0gZWxz
c2l6ZVByb3BlcnRpZXMgPSBmdW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmdldFJlc2l6ZVBy
DQogICAgICAgICAgICAoY29udGFpbmVkUmVjdC54ICsgY29udGFpbmVkUmVjdC53aWR0aCkgPD0g
YWlkLm9wZW4gIiArIHVybCk7DQoJCWNhbGxOYXRpdmUoIm9wZW4/dXJsPSIgKyBlbmNvZGVVUklD
Ow0KICAgICAgICByZXR1cm4gKGNvbnRhaW5lZFJlY3QueCA+PSBjb250YWluaW5nUmVjdC54ICYm
cnJlbnRQb3NpdGlvbi54ID0geDsNCgkJY3VycmVudFBvc2l0aW9uLnkgPSB5Ow0KCQljdXJyZW50
KyAiIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgZXZlbnQgIiArIGV2ZW50KTsNCgkJCQlyZXR1
CiAgICAgICAgdmFyIHJlc2l6ZVJlY3QgPSB7fTsNCiAgICAgICAgcmVzaXplUmVjdC54ID0gZGVm
DQoJCQl9DQoJCX0NCgl9Ow0KCQ0KICAgIGZ1bmN0aW9uIGlzQ2xvc2VSZWdpb25PblNjcmVlbihw
ZXJ0aWVzIik7DQoJCXJldHVybiBvcmllbnRhdGlvblByb3BlcnRpZXM7DQoJfTsNCg0KCW1yYWlk
bnQgPSBsaXN0ZW5lcnNbZXZlbnRdID0gbGlzdGVuZXJzW2V2ZW50XSB8fCBbXTsNCgkJLy8gY2hl
b3VzU2l6ZS53aWR0aCA9IGN1cnJlbnRQb3NpdGlvbi53aWR0aDsNCgkJcHJldmlvdXNTaXplLmhl
dW0uREVCVUcpIHsNCgkJCWNvbnNvbGUubG9nKCIoRC1tcmFpZC5qcykgIiArIG1zZyk7DQoJCX0N
aW9uUHJvcGVydGllcyA9IHsNCgkJImFsbG93T3JpZW50YXRpb25DaGFuZ2UiIDogdHJ1ZSwNCgkJ
ZXMgY29udGFpbnMgMyByZWFkLXdyaXRlIHByb3BlcnRpZXM6IHdpZHRoLCBoZWlnaHQsIGFuZCB1
ew0KCQlsb2cuaSgibXJhaWQuc2V0RXhwYW5kU2l6ZSAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQp
KyByZXNpemVQcm9wZXJ0aWVzLmN1c3RvbUNsb3NlUG9zaXRpb24gKw0KCQkJIiZhbGxvd09mZnNj
dXNlQ3VzdG9tQ2xvc2UuDQoJCQkvLyBTdGlsbCwgd2UnbGwgZG8gYSBiYXNpYyBzYW5pdHkgY2hl
dHVybiAodHlwZW9mIGFsbG93T3JpZW50YXRpb25DaGFuZ2UgPT09ICJib29sZWFuIik7DQoJCQl9
blNjcmVlbihwcm9wZXJ0aWVzKTsNCiAgICAgICAgfSBlbHNlIGlmICghaXNDbG9zZVJlZ2lvbk9u
eSBiZSB0aHJvd24uDQoJZnVuY3Rpb24gdmFsaWRhdGUocHJvcGVydGllcywgYWN0aW9uKSB7DQoJ
cm9yRXZlbnQoIlZhbHVlIG9mIHByb3BlcnR5ICIgKyBwcm9wICsgIiAoIiArIHZhbHVlCSsgIikg
cyBib3RoIGFzIHRoZSBrZXkgdG8gZ2V0IHRoZSB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mIHZhbGlk
CXZhciBuRXZlbnRzID0gT2JqZWN0LmtleXMobGlzdGVuZXJzKS5sZW5ndGg7DQoJCWxvZy5pKCJk
aGVpZ2h0KSAtIChyZXNpemVSZWN0LnkgKyByZXNpemVSZWN0LmhlaWdodCk7DQogICAgICAgIH0N
dXN0b21DbG9zZVBvc2l0aW9uIikgPw0KCQkJCXByb3BlcnRpZXMuY3VzdG9tQ2xvc2VQb3NpdGlv
byB0aGlzIGZ1bmN0aW9uIG11c3QgY29udGFpbiB3aWR0aCwgaGVpZ2h0LCBvZmZzZXRYLCBvZmZz
aXN0ZW5lcnNbZXZlbnRdOw0KCQlpZiAoZXZlbnRMaXN0ZW5lcnMpIHsNCgkJCXZhciBsZW4gPSBl
Iik7DQoJCQlmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQoJCQkJZXZlbnRMaXN0ZW5l
dXN0b21DbG9zZS4NCgkJLy8gKFRoYXQgaXMsIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRp
aW9uKG1zZykgew0KCQlpZiAobXJhaWQubG9nTGV2ZWwgPD0gbXJhaWQuTG9nTGV2ZWxFbnVtLkVS
cnRpZXMudXNlQ3VzdG9tQ2xvc2UgIT09IG9sZFVzZUN1c3RvbUNsb3NlKSB7DQoJCQljYWxsTmF0
aHQgKw0KCSAgICAgICAgIiZvZmZzZXRYPSIgKyAocmVzaXplUHJvcGVydGllcy5vZmZzZXRYICsg
CWlmICghdmFsaWRhdGUocHJvcGVydGllcywgInNldE9yaWVudGF0aW9uUHJvcGVydGllcyIpKSB7
CQl2YXIgbGVuID0gbGlzdGVuZXJzRm9yRXZlbnQubGVuZ3RoOw0KCQkJCWZvciAodmFyIGkgPSAw
LA0KCQkJImZvcmNlT3JpZW50YXRpb24iIDogZnVuY3Rpb24oZm9yY2VPcmllbnRhdGlvbikgew0K
aHQ7Ow0KCQl9DQoJfTsNCg0KCW1yYWlkLnNldFN1cHBvcnRzID0gZnVuY3Rpb24oZmVhdHVyZSwg
IFRoZSBvbmx5IHRpbWUgaXQgaXMgdmFsaWQgdG8gY2FsbCByZXNpemUgaXMgd2hlbiB0aGUgYWQg
bW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgbGlzdGVuZXIpIHsNCgkJbG9nLmko
IiA6ICJjZW50ZXIiLA0KCQkiQk9UVE9NX0xFRlQiIDogImJvdHRvbS1sZWZ0IiwNCgkJIkJPVFRP
c3RyaW5nIiAmJiB2YWxpZFBvc2l0aW9ucy5pbmRleE9mKGN1c3RvbUNsb3NlUG9zaXRpb24pICE9
bmFtZSBvZiB0aGUgc2V0dGVyIGZ1bmN0aW9uDQoJLy8gd2hpY2ggY2FsbGVkIHRoaXMgZnVuY3Rp
cHJvcGVydGllcy53aWR0aDsNCiAgICAgICAgcmVzaXplUmVjdC5oZWlnaHQgPSBwcm9wZXJ0aWVz
ZSA9IGZ1bmN0aW9uKCkgew0KCQlsb2cuaSgibXJhaWQuY2xvc2UiKTsNCgkJaWYgKHN0YXRlID09
LmdldFBsYWNlbWVudFR5cGUgPSBmdW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmdldFBsYWNl
dGgsIGhlaWdodCkgew0KCQlsb2cuaSgibXJhaWQuc2V0TWF4U2l6ZSAiICsgd2lkdGggKyAieCIg
KSkgew0KCQkJaWYgKGxpc3RlbmVyKSB7DQoJCQkJdmFyIGxpc3RlbmVyc0ZvckV2ZW50ID0gbGlz
ICIgKyBtc2cpOw0KCQl9DQoJfTsNCg0KCWxvZy53ID0gZnVuY3Rpb24obXNnKSB7DQoJCWlmICht
LnkgKyBwcm9wZXJ0aWVzLm9mZnNldFkgKyBhZGp1c3RtZW50cy55Ow0KICAgICAgICBwcmludFJl
UEVSVElFU19DVVNUT01fQ0xPU0VfUE9TSVRJT04uVE9QX1JJR0hULA0KCQkib2Zmc2V0WCIgOiAw
cmVzaXplZCBzdGF0ZS4NCgkJaWYgKHBsYWNlbWVudFR5cGUgIT09IFBMQUNFTUVOVF9UWVBFUy5J
b250YWluaW5nUmVjdCwgY29udGFpbmVkUmVjdCkgew0KICAgICAgICBsb2cuZCgiaXNSZWN0Q29u
LA0KCQkib2Zmc2V0WSIgOiAwLA0KCQkiYWxsb3dPZmZzY3JlZW4iIDogdHJ1ZQ0KCX07DQoNCgl2
ICIgWyIgKyBhcmdzLnRvU3RyaW5nKCkgKyAiXSIpOw0KCQl2YXIgZXZlbnRMaXN0ZW5lcnMgPSBs
U2l6ZUNoYW5nZUV2ZW50ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCk7DQoJCWlmIChzdGF0ZSAh
b3BlcnRpZXMiKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCW9yaWVudGF0aW9uUHJvcGVydGllcy5h
aHQpKSB7DQogICAgICAgICAgICBhZGp1c3RtZW50cy55ID0gKG1heFJlY3QueSArIG1heFJlY3Qu
YXRpb24gPSBvcmllbnRhdGlvblByb3BlcnRpZXMuZm9yY2VPcmllbnRhdGlvbjsNCg0KCQkvLyBv
biA6IHJlc2l6ZVByb3BlcnRpZXMuY3VzdG9tQ2xvc2VQb3NpdGlvbjsNCiAgICAgICAgbG9nLmQo
cG5hbWVdOw0KCQkJfQ0KCQl9DQoNCgkJLy8gSW4gTVJBSUQgdjIuMCwgYWxsIGV4cGFuZGVkIGFk
CgkJInNldEV4cGFuZFByb3BlcnRpZXMiIDogew0KCQkJLy8gSW4gTVJBSUQgMi4wLCB0aGUgb25s
CiAgICAgICAgdmFyIGNsb3NlUmVjdCA9IHsgIndpZHRoIjogNTAsICJoZWlnaHQiOiA1MCB9Ow0K
T04uc3RyaW5naWZ5KHBhcmFtZXRlcnMpKTsNCgkJfSBlbHNlIHsNCgkJCWxvZy5lKCJjcmVhdGVD
aW50UmVjdChsYWJlbCwgcmVjdCkgew0KICAgICAgICBsb2cuZChsYWJlbCArDQogICAgICAgICAg
DQoJCQkJCQkicmVxdWlyZWQgcHJvcGVydHkgIiArIHByb3BuYW1lICsgIiBpcyBtaXNzaW5nIiwN
KG1heFJlY3QsIGNsb3NlUmVjdCk7DQogICAgfQ0KICAgIA0KICAgIGZ1bmN0aW9uIGZpdFJlc2l6
ImZvcmNlT3JpZW50YXRpb24iIDogT1JJRU5UQVRJT05fUFJPUEVSVElFU19GT1JDRV9PUklFTlRB
UmVjdCk7DQogICAgICAgIHByaW50UmVjdCgiY29udGFpbmVkUmVjdCIsIGNvbnRhaW5lZFJlY3Qp
ciBzdHIyID0gU3RyaW5nKHJlZ2lzdGVyZWRMaXN0ZW5lcik7DQoJCQkJCWlmIChsaXN0ZW5lciA9
CiAgICAgICAgaWYgKCFhbGxvd09mZnNjcmVlbikgew0KICAgICAgICAgICAgaWYgKHByb3BlcnRp
YWxpZGF0aW9uIik7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQl2YXIgb2xkVXNlQ3VzdG9tQ2xvc2Ug
R0UsIHN0YXRlKTsNCgkJfQ0KCX07DQoNCgltcmFpZC5maXJlVmlld2FibGVDaGFuZ2VFdmVudCA9
CXZhciByd1Byb3BzID0gWyAid2lkdGgiLCAiaGVpZ2h0IiwgInVzZUN1c3RvbUNsb3NlIiBdOw0K
InNldE9yaWVudGF0aW9uUHJvcGVydGllcz8iICsgcGFyYW1zKTsNCgl9Ow0KDQoJbXJhaWQuc2V0
ICBpZiAocmVzaXplUmVjdC55IDwgbWF4UmVjdC55KSB7DQogICAgICAgICAgICBhZGp1c3RtZW50
CX0NCgkJLy8gVGhlIG9ubHkgdGltZSBpdCBpcyB2YWxpZCB0byBjYWxsIGV4cGFuZCBpcyB3aGVu
ZS5sb2coIihXLW1yYWlkLmpzKSAiICsgbXNnKTsNCgkJfQ0KCX07DQoNCglsb2cuZSA9IGZ1bmN0
Ow0KCX07DQoNCgkvLyBtZXRob2RzIHRvIGZpcmUgZXZlbnRzDQoNCgltcmFpZC5maXJlRXJyb3JF
ciBuZXdPcmllbnRhdGlvblByb3BlcnRpZXMgPSB7fTsNCgkJbmV3T3JpZW50YXRpb25Qcm9wZXJ0
cm9wZXJ0aWVzKSB7DQogICAgICAgIGxvZy5kKCJpc0Nsb3NlUmVnaW9uT25TY3JlZW4iKTsNCiAg
c2l0aW9uID09PSAiY2VudGVyIikgew0KICAgICAgICAgICAgY2xvc2VSZWN0LnkgPSByZXNpemVS
ID0gZmFsc2U7DQoJdmFyIGlzUmVzaXplUmVhZHkgPSBmYWxzZTsNCg0KCXZhciBleHBhbmRQcm9w
cnVlOw0KCX07DQoNCgltcmFpZC5zdG9yZVBpY3R1cmUgPSBmdW5jdGlvbih1cmwpIHsNCgkJbG9n
CX0NCgkJfQ0KCQlyZXR1cm4gcmV0dmFsOw0KCX07DQoNCgl2YXIgYWxsVmFsaWRhdG9ycyA9IHsN
dGlvbi55ICsgcHJvcGVydGllcy5vZmZzZXRZOw0KICAgICAgICByZXNpemVSZWN0LndpZHRoID0g
CQlmb3IgKHZhciBpID0gMDsgaSA8IHJ3UHJvcHMubGVuZ3RoOyBpKyspIHsNCgkJCXZhciBwcm9w
PSAtMSk7DQoJCQl9LA0KCQkJImFsbG93T2Zmc2NyZWVuIiA6IGZ1bmN0aW9uKGFsbG93T2Zmc2Ny
ZXJ0aWVzLmFsbG93T2Zmc2NyZWVuIDogcmVzaXplUHJvcGVydGllcy5hbGxvd09mZnNjcmVlbjsN
DQoJCQlyZXR1cm47DQoJCX0NCgkJaWYgKCFjb250YWlucyhldmVudCwgRVZFTlRTKSkgew0KCQkJ
ZWN0LnkgKyAocmVzaXplUmVjdC5oZWlnaHQgLyAyKSAtIDI1Ow0KICAgICAgICB9IGVsc2UgaWYg
YXIgY3VycmVudFBvc2l0aW9uID0gew0KCQkieCIgOiAwLA0KCQkieSIgOiAwLA0KCQkid2lkdGgi
cnRpZXMpIHsNCgkJbG9nLmkoIm1yYWlkLnNldE9yaWVudGF0aW9uUHJvcGVydGllcyIpOw0KDQoJ
b25Qcm9wZXJ0aWVzLCBvcg0KCS8vIHNldFJlc2l6ZVByb3BlcnRpZXMpLg0KCS8vIEl0IHNlcnZl
ZEV2ZW50TGlzdGVuZXIiKTsNCgkJCXJldHVybjsNCgkJfQ0KCQl2YXIgbGlzdGVuZXJzRm9yRXZl
byBlaXRoZXIgcG9ydHJhaXQgb3IgbGFuZHNjYXBlDQoJCS8vIGlzIGNvbnNpZGVyZWQgYW4gZXJy
ID0gaGVpZ2h0Ow0KCQlpZiAoIWlzRXhwYW5kUHJvcGVydGllc1NldCkgew0KCQkJZXhwYW5kUHJv
ICAgICAgICAgY2xvc2VSZWN0LnggPSByZXNpemVSZWN0LnggKyAocmVzaXplUmVjdC53aWR0aCAv
TkxJTkUNCgkJCQl8fCAoc3RhdGUgIT09IFNUQVRFUy5ERUZBVUxUICYmIHN0YXRlICE9PSBTVEFU
ew0KCQlsb2cuaSgibXJhaWQucGxheVZpZGVvICIgKyB1cmwpOw0KCQljYWxsTmF0aXZlKCJwbGF5
dGgpKSB7DQogICAgICAgICAgICBhZGp1c3RtZW50cy54ID0gKG1heFJlY3QueCArIG1heFJlY3Qu
emVSZWN0LndpZHRoID0gcHJvcGVydGllcy53aWR0aDsNCiAgICAgICAgcmVzaXplUmVjdC5oZWln
X1BPU0lUSU9OID0gew0KCQkiVE9QX0xFRlQiIDogInRvcC1sZWZ0IiwNCgkJIlRPUF9DRU5URVIi
IGhlaWdodCk7DQoJCX0NCgl9Ow0KDQoJbXJhaWQuc2V0RGVmYXVsdFBvc2l0aW9uID0gZnVuY3Rp
cnNbaV0uYXBwbHkobnVsbCwgYXJncyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlsb2cuaSgibm8g
IGFycmF5KSB7DQoJCWZvciAoIHZhciBpIGluIGFycmF5KSB7DQoJCQlpZiAoYXJyYXlbaV0gPT09
CXZhciByZXR2YWwgPSB0cnVlOw0KCQl2YXIgdmFsaWRhdG9ycyA9IGFsbFZhbGlkYXRvcnNbYWN0
ZXJ0aWVzW3Byb3BuYW1lXTsNCgkJCX0NCgkJfQ0KDQoJCS8vIFNldHRpbmcgYWxsb3dPcmllbnRh
d2FibGU7DQoJfTsNCg0KCW1yYWlkLm9wZW4gPSBmdW5jdGlvbih1cmwpIHsNCgkJbG9nLmkoIm1y
IG1yYWlkLkxvZ0xldmVsRW51bS5JTkZPKSB7DQoJCQljb25zb2xlLmxvZygiKEktbXJhaWQuanMp
YWlkLmdldEV4cGFuZFByb3BlcnRpZXMgPSBmdW5jdGlvbigpIHsNCgkJbG9nLmkoIm1yYWlkLmdl
KTsNCgkJcmV0dXJuIHNjcmVlblNpemU7DQoJfTsNCg0KCW1yYWlkLmdldFN0YXRlID0gZnVuY3Rp
Q2xvc2UiIDogZmFsc2UsDQoJCSJpc01vZGFsIiA6IHRydWUNCgl9Ow0KDQoJdmFyIG9yaWVudGF0
PT0gcmVnaXN0ZXJlZExpc3RlbmVyIHx8IHN0cjEgPT09IHN0cjIpIHsNCgkJCQkJCWxpc3RlbmVy
T05FKSB7DQoJCQltcmFpZC5maXJlRXJyb3JFdmVudCgNCgkJCQkJImFsbG93T3JpZW50YXRpb25D
cGFydCkiKTsNCgkJfSBlbHNlIHsNCgkJCWxvZy5pKCJtcmFpZC5leHBhbmQgIiArIHVybCk7DQoJ
Q2hhbmdlRXZlbnQgIiArIG5ld1N0YXRlKTsNCgkJaWYgKHN0YXRlICE9PSBuZXdTdGF0ZSkgew0K
dW1waW5nIGxpc3RlbmVycyAoIiArIG5FdmVudHMgKyAiIGV2ZW50cykiKTsNCgkJZm9yICggdmFy

信息 应用程序记录日志信息,不得记录敏感信息

应用程序记录日志信息,不得记录敏感信息
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#logs

Files:
com/chartboost/sdk/Libraries/CBLogging.java, line(s) 31,37,25,43,49,79,55,61,67,73
com/chartboost/sdk/impl/t.java, line(s) 20,24,28,11,15
com/chartboost/sdk/unity/CBPlugin.java, line(s) 35,41,47,53,59,65,71,77,83,89,95,101,108,114,120,126,132,138,147,153,168,183,193,199,201,210,216,223,229,241,253,265,271,277,321,334,347,442,541,554,567,286,287
com/gameanalytics/sdk/GAPlatform.java, line(s) 96,105,114,127,133,143,151,160,33
com/gameanalytics/sdk/GameAnalytics.java, line(s) 92
com/gameanalytics/sdk/support/AsyncTask.java, line(s) 61
com/gameanalytics/sdk/support/GetGoogleAIDAsync.java, line(s) 34,20,25,28,31,35,43,47
com/heyzap/common/mraid/MRAIDInterstitial.java, line(s) 38,47,55,23
com/heyzap/common/mraid/MRAIDView.java, line(s) 164,198,245,254,264,340,372,398,406,463,481,491,516,533,545,555,580,582,602,707,710,715,819,843,844,845,846,961,984,991,998,1004,1009,1022,1031,1036,1039,1044,1047,1052,1062,1087,1093,1109,1144,1157,1163,1176,1182,1188,1195,1203,1223,1260,1264,1286,1302,1305,1319,1323,1324,1325,1328,1345,1346,1350,1383,1386,1401,450,609,640,674,678,1080,1221,1258
com/heyzap/common/mraid/internal/MRAIDNativeFeatureManager.java, line(s) 20,26,32,38,44
com/heyzap/common/mraid/internal/MRAIDParser.java, line(s) 15,30,34
com/heyzap/common/mraid/nativefeature/MRAIDNativeFeatureProvider.java, line(s) 151,101,128,156,158,144,154,174,183,187
com/heyzap/common/vast/VASTInterstitial.java, line(s) 65,163,184,196,95,131,176
com/heyzap/common/vast/model/VASTModel.java, line(s) 70,107,147,174,202,236,241,246,263,266,270,273,275,101,140,168,196,230,257,94
com/heyzap/common/vast/processor/VASTModelPostValidator.java, line(s) 14,16,25,31,37,42,29
com/heyzap/common/vast/processor/VASTProcessor.java, line(s) 35,60,69,83,85,102,106,115,117,121,54,71,96,109,64
com/heyzap/common/vast/util/DefaultMediaPicker.java, line(s) 46,51,56,61,66,69,119,103
com/heyzap/common/vast/util/HttpTools.java, line(s) 20,34,44,65
com/heyzap/common/vast/util/XmlTools.java, line(s) 25,35,42,60,78,91,37,54,72,85,114
com/heyzap/common/vast/util/XmlValidation.java, line(s) 17,19,21,23,13,26
com/heyzap/internal/DevLogger.java, line(s) 29,21,25,9,13,17
com/heyzap/internal/Logger.java, line(s) 44,51,66,168,73,25,27,60
com/immersion/content/EndpointWarp.java, line(s) 77
com/immersion/content/Log.java, line(s) 39,50,74
com/immersion/hapticmediasdk/HapticContentSDK.java, line(s) 193
com/immersion/hapticmediasdk/HapticContentSDKFactory.java, line(s) 33,54,71,41
com/immersion/hapticmediasdk/MediaPlaybackSDK.java, line(s) 72,79,84,91,137,144
com/immersion/hapticmediasdk/MediaTaskManager.java, line(s) 60,544,548
com/immersion/hapticmediasdk/controllers/FileReaderFactory.java, line(s) 148,144
com/immersion/hapticmediasdk/controllers/HapticDownloadThread.java, line(s) 161,204,224,255,277,300,264
com/immersion/hapticmediasdk/controllers/HapticPlaybackThread.java, line(s) 156,151,162,777
com/immersion/hapticmediasdk/controllers/ImmersionHttpClient.java, line(s) 76,78
com/immersion/hapticmediasdk/controllers/MediaController.java, line(s) 109,115,399
com/immersion/hapticmediasdk/controllers/MemoryAlignedFileReader.java, line(s) 460,462,478,479,480,481,483,485,487,488,489,490,496,498,500,144
com/immersion/hapticmediasdk/controllers/MemoryMappedFileReader.java, line(s) 372,374,375,376,377,384,386,388,390,391,392,393,394,396,398,135,468
com/immersion/hapticmediasdk/utils/Log.java, line(s) 37,74,97
com/jirbo/adcolony/ADCData.java, line(s) 660,668,670,671,672,673,674,675,676,677,678,679,680,681,682,683
com/jirbo/adcolony/a.java, line(s) 169,175,172
com/jirbo/adcolony/af.java, line(s) 149
com/jirbo/adcolony/e.java, line(s) 145,301,463,646,648,656,658
com/jirbo/adcolony/k.java, line(s) 339
com/jirbo/adcolony/p.java, line(s) 83
com/jirbo/adcolony/z.java, line(s) 51
com/jirbo/unityadc/UnityADC.java, line(s) 145,151
com/nineoldandroids/animation/PropertyValuesHolder.java, line(s) 148,179,227,245,247,264,266,301,303,434,436,522,524
com/prime31/ActivityProxyObjectHelper.java, line(s) 40,50,38,48
com/prime31/AlarmManagerReceiver.java, line(s) 44,47,51,62,79,89,94,97,113,116,119,122,128,130,133,136,139,144,147,154,168,177,181,190
com/prime31/ContactFetcher.java, line(s) 19
com/prime31/EtceteraPlugin.java, line(s) 278,284,293,301,536,540,558,560,749,762,788,814,103,150,175,202,232,236,249,253,470,487,489,501,537,567,572,577,589,601,604,612,625,713,736,739,766,769,802,834,844,851,873,884,931,949,972,981,990,1035,1048,1060,1072,1106,1111,1113,1116,1211,1253,1259,1265,1273,1301,514,515
com/prime31/EtceteraPluginBase.java, line(s) 52,112,144,39,41,43,57,84,87,90,95
com/prime31/EtceteraProxyActivity.java, line(s) 89,185,191,245,115,138,44,63,79,116,129,148,151,155,164,167,170,172,189,193,202,207,212,216,228,234,235,241,255,259,264,287,293,93
com/prime31/GoogleIABPlugin.java, line(s) 190,59,94,109,117,139,143,163,171,186,201,238,273,113,122,167
com/prime31/GoogleIABPluginBase.java, line(s) 48,96,35,37,39,53,68,71,74,79,108,123
com/prime31/GoogleIABProxyActivity.java, line(s) 58,68,71,77,38,51,20,28,34,35
com/prime31/IABConstants.java, line(s) 11,17,23,36
com/prime31/ImageUtils.java, line(s) 31,33,37,40,53
com/prime31/P31VideoPlayerActivity.java, line(s) 247,257,262,268,133,173,233,58,62,85,93,103,105,114,141,146,149,153,208,221,223,277,231
com/prime31/SamsungCameraHack.java, line(s) 17,25,32,37,39,44,46,50,54
com/prime31/Soomla.java, line(s) 24,34,53,57,61,64,76,78,87,89,98,100,110,121,123,132,134,143,145,154,156,66
com/prime31/UnityPlayerNativeActivity.java, line(s) 19
com/prime31/WebViewActivity.java, line(s) 145,38,88,150,163
com/prime31/ads/FlurryAds.java, line(s) 17,21,57,81,180
com/prime31/ads/FlurryAdsBase.java, line(s) 54,151,41,43,45,59,74,77,80,85,102,107
com/prime31/analytics/FlurryAnalytics.java, line(s) 13,21,37,41
com/prime31/analytics/FlurryAnalyticsBase.java, line(s) 54,151,41,43,45,59,74,77,80,85,102,107
com/prime31/util/IabHelper.java, line(s) 710,107,197,587,649,714
com/prime31/util/Inventory.java, line(s) 25,38,50
com/prime31/util/Security.java, line(s) 23,27,40,45,56,61,64,67,70
com/unity3d/ads/android/UnityAds.java, line(s) 98,101,357,365,375,166,168,173,175,299,326,359,362,157,291,351,353,57,59
com/unity3d/ads/android/UnityAdsDeviceLog.java, line(s) 170,178,199
com/unity3d/ads/android/UnityAdsUtils.java, line(s) 45,66,70,152,131,137,141,155
com/unity3d/ads/android/cache/UnityAdsCache.java, line(s) 21,36,39,78,81,88,91,97,99,105,107,110,83
com/unity3d/ads/android/cache/a.java, line(s) 12
com/unity3d/ads/android/cache/b.java, line(s) 39
com/unity3d/ads/android/cache/c.java, line(s) 29,34,55,57,63,70
com/unity3d/ads/android/campaign/UnityAdsCampaign.java, line(s) 59,70,81,92,103,114,127,130,141,148,37,48
com/unity3d/ads/android/data/UnityAdsAdvertisingId.java, line(s) 39,65,70
com/unity3d/ads/android/data/UnityAdsDevice.java, line(s) 105,122,41
com/unity3d/ads/android/data/b.java, line(s) 30
com/unity3d/ads/android/item/UnityAdsRewardItem.java, line(s) 27
com/unity3d/ads/android/item/UnityAdsRewardItemManager.java, line(s) 32
com/unity3d/ads/android/properties/UnityAdsProperties.java, line(s) 89,163,169
com/unity3d/ads/android/unity3d/UnityAdsUnityEngineWrapper.java, line(s) 57,61,35,76
com/unity3d/ads/android/unity3d/UnityAdsUnityWrapper.java, line(s) 85,140,145,147,207,31,56,203,210,157
com/unity3d/ads/android/unity3d/a.java, line(s) 29
com/unity3d/ads/android/unity3d/b.java, line(s) 26
com/unity3d/ads/android/video/UnityAdsVideoPlayView.java, line(s) 68,171,174,184,215
com/unity3d/ads/android/video/a.java, line(s) 15
com/unity3d/ads/android/video/e.java, line(s) 17
com/unity3d/ads/android/video/j.java, line(s) 68,80
com/unity3d/ads/android/video/o.java, line(s) 14
com/unity3d/ads/android/view/UnityAdsFullscreenActivity.java, line(s) 41,99,120,158,195,206,233,238,254,270,276,296,371,394,404,429,434,474,486,78,91,131,140,146,153,166,176,182,193,216,222,277,282,295,301,354,360,369,377,383,390,399,409,452,457,491,498,512,522,542,503,547
com/unity3d/ads/android/view/UnityAdsMainView.java, line(s) 102,107,113
com/unity3d/ads/android/view/UnityAdsMuteVideoButton.java, line(s) 57
com/unity3d/ads/android/view/UnityAdsViewUtils.java, line(s) 13
com/unity3d/ads/android/view/b.java, line(s) 36,50,34,55,59
com/unity3d/ads/android/view/d.java, line(s) 29
com/unity3d/ads/android/view/e.java, line(s) 17
com/unity3d/ads/android/webapp/UnityAdsWebBridge.java, line(s) 37,47,89,93
com/unity3d/ads/android/webapp/UnityAdsWebData.java, line(s) 83,85,108,111,139,163,168,176,296,304,385,389,392,397,432,446,475,522,581,623,626,67,131,292,299,306,356,464,550,556,559,585,311,323,542
com/unity3d/ads/android/webapp/UnityAdsWebView.java, line(s) 59,68,98,115,121,123,124,125,126,127,129,144,175,178
com/unity3d/ads/android/webapp/g.java, line(s) 11,14
com/unity3d/ads/android/webapp/i.java, line(s) 18
com/unity3d/ads/android/webapp/k.java, line(s) 81,179,188,189,74,120,174,203,207,212,236
com/unity3d/ads/android/webapp/l.java, line(s) 33
com/unity3d/ads/android/webapp/n.java, line(s) 29,36,40
com/unity3d/ads/android/webapp/o.java, line(s) 31,25
com/unity3d/ads/android/webapp/p.java, line(s) 21,30,36
com/unity3d/ads/android/zone/UnityAdsZone.java, line(s) 96,104
com/unity3d/ads/android/zone/UnityAdsZoneManager.java, line(s) 34
com/vungle/VunglePlugin.java, line(s) 56,33,45,84
com/vungle/log/Logger.java, line(s) 90,109
org/fmod/FMODAudioDevice.java, line(s) 71
org/fmod/a.java, line(s) 82
rrrrrr/rrccrr.java, line(s) 112
y/z/a/Main.java, line(s) 95
y/z/a/d.java, line(s) 27
y/z/a/i.java, line(s) 61
y/z/a/n.java, line(s) 40

安全 此应用程序可能具有Root检测功能

此应用程序可能具有Root检测功能
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05j-Testing-Resiliency-Against-Reverse-Engineering.md#testing-root-detection-mstg-resilience-1

Files:
com/chartboost/sdk/Libraries/CBUtility.java, line(s) 263,271,267,271,271,271,271
com/gameanalytics/sdk/GAPlatform.java, line(s) 228,208,216,212,216,216,216,216,70,202

安全 此应用程序使用SSL Pinning 来检测或防止安全通信通道中的MITM攻击

此应用程序使用SSL Pinning 来检测或防止安全通信通道中的MITM攻击
https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05g-Testing-Network-Communication.md#testing-custom-certificate-stores-and-certificate-pinning-mstg-network-4

Files:
com/heyzap/http/MySSLSocketFactory.java, line(s) 24,72

关注 应用程序可能与位于OFAC制裁国家 (中国) 的服务器 (www.linkedin.com) 通信。

{'ip': '52.130.75.155', 'country_short': 'CN', 'country_long': '中国', 'region': '上海', 'city': '上海', 'latitude': '31.224333', 'longitude': '121.468948'}

安全评分: ( Mad Aces 1.2.2.3)