安全分数
安全分数 27/100
风险评级
等级
- A
- B
- C
- 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'}